Я пытаюсь создать диаграмму Венна с помощью пакета ggvenn, используя ggplot2. Однако, когда я сохраняю изображение с помощью ggsave, вокруг изображения остается много пустого пространства. Я попытался установить поля, используя par(mar=c(0,0,0,0)), а также в самом коде графика.
Воспроизводимый пример
library(ggvenn)
library(ggplot2)
d <- tibble(value = c(1, 2, 3, 5, 6, 7, 8, 9),
`Set 1` = c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE),
`Set 2` = c(TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE),
`Set 3` = c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE),
`Set 4` = c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE))
p2 = ggplot(d, aes(A = `Set 1`, B = `Set 2`)) +
geom_venn(fill_color = c("white", "white"), show_percentage = FALSE) +
theme(axis.line=element_blank(),
panel.background = element_rect(fill = "white",colour = "white"),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position = "none",
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
plot.background=element_blank()) +
theme(plot.margin=grid::unit(c(0,0,0,0), "mm"))
#ggsave(plot = p2, "/plot2.tiff"
в результате получается изображение с большими белыми полями.
Как я могу уменьшить маржу?
Я попытался уменьшить поля, используя par(mar=c(0,0,0,0) и theme (plot.margin=grid::unit(c(0,0,0,0),"mm"))
Чтобы получить настоящие круги на диаграмме Венна, вы, вероятно, захотите использовать coord_fixed()
. Отключите расширение оси с помощью expand = FALSE
. Мы можем добавить theme_void()
, который удаляет все оси, поля и т. д.
ggplot(d, aes(A = `Set 1`, B = `Set 2`)) +
geom_venn(fill_color = c("white", "white"), show_percentage = FALSE) +
coord_fixed(expand = FALSE) +
theme_void()
Это должно дать участок с разумными запасами.
Если вы хотите еще больше их уменьшить, задайте более строгие ограничения по оси coord_fixed()
, например:
coord_fixed(expand = FALSE, xlim = c(-1.7, 1.7), ylim = c(-1.4, 1.4))
В итоге я изменил значения в теме(plot.margin=grid::unit(c(0,0,0,0), "cm")) на theme(plot.margin=grid::unit(c(- 7,-3,-10,-3), "см")) получил именно то, что хотел. Но спасибо за альтернативное решение.
Два предложения (оба, возможно, неоптимальные); (1) ваша маржа также может быть отрицательной, т. е.
theme(plot.margin=grid::unit(rep(-20, 4), "mm"))
. (2) Вы можете использовать пакет Magick для обрезки пробелов в изображениях:image_read("plot2.tiff") |> image_trim() |> image_write("plot2_trimmed.tiff")