gpt4 book ai didi

r - 如何使用plot_grid在没有任何空间的情况下放置绘图?

转载 作者:行者123 更新时间:2023-12-01 19:28:35 27 4
gpt4 key购买 nike

我正在排列 2x2 的图。这些图共享相同的轴,所以我想将它们放在一起,例如

这段代码:

library(ggplot2)
library(cowplot)

Value <- seq(0,1000, by = 1000/10)
Index <- 0:10
DF <- data.frame(Index, Value)


plot <- ggplot(DF, aes(x = Index, y = Value)) +
geom_line(linetype = 2) +
theme(aspect.ratio = 0.5)

plot_grid(plot, plot, plot, plot, align = "hv", ncol = 2)

产生

enter image description here

但我想要这样的东西:

enter image description here

如何才能获得类似的结果?

最佳答案

我认为这是 egg 包中的 ggarrange() 函数的情况。使用 plot_grid() 执行此操作需要无休止的摆弄,而且不值得。

(技术原因是 plot_grid() 将网格中每个图的总面积保持不变,但如果某些图有 x 轴而其他图没有,那么它们会占用不同的面积。人们可以尝试使用 rel_heights 参数来规避这一问题,但没有好的方法来计算 rel_heights 的正确值,因此这将是一种反复试验。相比之下, ggarrange() 分别查看绘图面板和周围的元素,并确保绘图面板具有相同的大小。)

这是使用ggarrange()的代码:

Value <- seq(0,1000, by = 1000/10)
Index <- 0:10
DF <- data.frame(Index, Value)


pbase <- ggplot(DF, aes(x = Index, y = Value)) +
geom_line(linetype = 2) +
theme_bw()

ptopleft <- pbase +
scale_x_continuous(position = "top") +
theme(plot.margin = margin(5.5, 0, 0, 5.5),
axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())

ptopright <- pbase +
scale_y_continuous(position = "right") +
scale_x_continuous(position = "top") +
theme(plot.margin = margin(5.5, 5.5, 0, 0),
axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())

pbottomleft <- pbase +
theme(plot.margin = margin(0, 0, 5.5, 5.5))

pbottomright <- pbase +
scale_y_continuous(position = "right") +
theme(plot.margin = margin(0, 5.5, 5.5, 0))

library(egg)
ggarrange(ptopleft, ptopright,
pbottomleft, pbottomright,
ncol = 2)

enter image description here

两条评论:

  1. 要删除顶部绘图上绘图面板下方的最后一点空间,我们需要将 x 轴移动到顶部,即使我们没有显示它。这是主题机制的一个奇怪的限制。我们无法完全摆脱一个轴。

  2. 我不太喜欢共享轴标题,如您的示例所示。我认为每个轴都应该有一个标题。如果您想要共享轴标题,为什么不使用分面机制?

关于r - 如何使用plot_grid在没有任何空间的情况下放置绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com