У меня есть график Эйлера, созданный с помощью пакета eulerr.
Пример данных:
fit <- euler(c(
"A" = 10000,
"B" = 7000,
"A&B" = 600))
plot(fit,
quantities = list(fontsize = 9),
fills = c("#8ABDAF", "#DC8E8D"),
fontsize = 9,
main = list(label = "Title"),
labels = NULL,
legend = list(labels = c("A", "B"))
)
Я хочу экспортировать этот базовый график R в PowerPoint не как изображение, а таким образом, чтобы я мог изменять каждый элемент.
Поскольку это не ggplot, я не могу экспортировать его с помощью пакета export. Но похоже, что существует возможность комбинации пакетов officer и rvg.
Я видел другую тему, использующую функцию ph_with_vg из пакета rvg, но после установки rvg эта функция не существует.
Я попробовал следующее:
read_pptx() %>%
add_slide(layout = "Title and Content", master = "Office Theme") %>%
ph_with(dml(code = {
plot(fit)
}),
location = ph_location_type(type = "body")) %>%
print(target = "Euler_fit.pptx")
Но я получаю ошибку:
Error in read_xml.raw(charToRaw(enc2utf8(x)), "UTF-8", ..., as_html = as_html, :
StartTag: invalid element name [68]
Я понятия не имею, что это значит.
Кто-нибудь знает, как это сделать?
Спасибо.





Пробовали {экспорт}?
fit = eulerr::euler(c("A" = 10000, "B" = 7000, "A&B" = 600))
plot(fit, quantities = list(fontsize = 9), fills = c("#8ABDAF", "#DC8E8D"),
fontsize = 9L, main = list(label = "Title"), labels = NULL,
legend = list(labels = c("A", "B")))
export::graph2ppt(file = "plot.pptx", width=6L, height=5L, append=TRUE)
Сохраните как SVG, затем вставьте.
library(eulerr)
library(officer)
library(magrittr) # pipe
fit <- euler(c(
"A" = 10000,
"B" = 7000,
"A&B" = 600))
# output as svg file:
img.file <- "tmp.svg"
svg(filename = img.file)
plot(fit,
quantities = list(fontsize = 9),
fills = c("#8ABDAF", "#DC8E8D"),
fontsize = 9,
main = list(label = "Title"),
labels = NULL,
legend = list(labels = c("A", "B"))
)
dev.off()
read_pptx() %>%
add_slide(layout = "Title and Content", master = "Office Theme") %>%
ph_with(external_img(img.file),
location = ph_location_type(type = "body"),
use_loc_size = TRUE) %>%
print(target = "Euler_fit.pptx")
Обратите внимание, что это сеточный график, а не базовый график.
Вам просто не хватает утверждения plot:
library(eulerr)
library(rvg)
library(officer)
fit <- euler(c(
"A" = 10000,
"B" = 7000,
"A&B" = 600))
p <- plot(fit,
quantities = list(fontsize = 9),
fills = c("#8ABDAF", "#DC8E8D"),
fontsize = 9,
main = list(label = "Title"),
labels = NULL,
legend = list(labels = c("A", "B"))
)
read_pptx() |>
add_slide(layout = "Title and Content", master = "Office Theme") |>
ph_with(dml(code = {
plot(p)
}),
location = ph_location_type(type = "body")) |>
print(target = "Euler_fit.pptx")
Спасибо, это сработало, я не знаю, почему это не сработало, когда я попробовал.