ggplot / ggpubr: annotate_figure игнорируется при экспорте графика

Я пытаюсь аннотировать сетку сюжета, которую я организовал, используя ggarrange() из пакета ggpubr. Для этого я использую функцию annotate_figure() после создания графика.

Моя проблема: когда я делаю это в интерактивном режиме (т.е. не создавая файлы с моим сюжетом), он работает отлично, но когда я экспортирую файлы (используя ggexport()), аннотации не отображаются.

Пример: см. пример в документации.

data("ToothGrowth")
df <- ToothGrowth
df$dose <- as.factor(df$dose)

# Create some plots
# ::::::::::::::::::::::::::::::::::::::::::::::::::
# Box plot
bxp <- ggboxplot(df, x = "dose", y = "len", color = "dose", palette = "jco")
# Dot plot
dp <- ggdotplot(df, x = "dose", y = "len", color = "dose", palette = "jco")
# Density plot
dens <- ggdensity(df, x = "len", fill = "dose", palette = "jco")

# Arrange and annotate
# ::::::::::::::::::::::::::::::::::::::::::::::::::
figure <- ggarrange(bxp, dp, dens, ncol = 2, nrow = 2)
#> `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
annotate_figure(figure,
    top = text_grob("Visualizing Tooth Growth", color = "red", face = "bold", size = 14),
    bottom = text_grob("Data source: \n ToothGrowth data set", color = "blue",
                       hjust = 1, x = 1, face = "italic", size = 10),
    left = text_grob("Figure arranged using ggpubr", color = "green", rot = 90),
    right = "I'm done, thanks :-)!",
    fig.lab = "Figure 1", fig.lab.face = "bold"
)

Это прекрасно работает. Однако, если я добавлю ggexport(figure, "whatever.pdf"), созданный файл не будет включать аннотации.

Есть идеи, как это решить?


person Galapagoose    schedule 30.10.2018    source источник
comment
Вы где-нибудь сохраняете результаты annotate_figure? Вы должны передать этот результат ggexport()   -  person MrFlick    schedule 30.10.2018
comment
Во-вторых, что сказал @MrFlick - если я сохраню вывод annotate_figure и передаю это в ggexport, он сработает. Я убрал ваши отступы, потому что на первый взгляд казалось, что гораздо большая часть этого кода была аргументами для ggarrange. Интересно, путали ли вы себя с этим, думая, что вы назначили figure вещи, которых у вас не было ...?   -  person camille    schedule 30.10.2018


Ответы (1)


Вам просто нужно назначить annotate_figure (...) переменной для отображения или сохранения, как указано в комментариях.

Вот ответ, где ей присваивается сама переменная:

figure <- ggarrange(bxp, dp, dens, ncol = 2, nrow = 2)
figure <- annotate_figure(figure,
    top = text_grob("Visualizing Tooth Growth", color = "red", face = "bold", size = 14),
    bottom = text_grob("Data source: \n ToothGrowth data set", color = "blue",
                       hjust = 1, x = 1, face = "italic", size = 10),
    left = text_grob("Figure arranged using ggpubr", color = "green", rot = 90),
    right = "I'm done, thanks :-)!",
    fig.lab = "Figure 1", fig.lab.face = "bold"
)
ggsave(filename="figure.png", plot = figure)
ggexport(figure, filename = "figure2.png")

фигурка

person ibilgen    schedule 10.01.2019