gpt4 book ai didi

r - 使用 ggplot2 在多个面板中划分长时间序列

转载 作者:行者123 更新时间:2023-12-03 21:28:20 24 4
gpt4 key购买 nike

我有一个相当长的时间序列,我想在 ggplot 中绘制,但它足够长,即使使用页面的整个宽度也几乎不可读。

one time series in one panel

相反,我想要做的是将图分成 2 个(或更多,在一般情况下)面板,一个在彼此之上。

我可以手动完成,但不仅很麻烦,而且很难让轴具有相同的比例。理想情况下,我想要这样的东西:

ggplot(data, aes(time, y)) + 
geom_line() +
facet_time(time, n = 2)

然后得到这样的东西:

one time series in multiple panesl

(此图是使用 facet_wrap(~(year(as.Date(time)) > 2000), ncol = 1, scales = "free_x") 制作的,它弄乱了 x 轴比例,它仅适用于 2 个面板,并且不适用于 geom_smooth() )

此外,理想情况下,它还可以正确处理汇总统计信息。例如,对 geom_smooth() 使用正确的数据(所以分面不会这样做,因为在每个分面的开头它不会使用前一个分面的最后一块中的数据)。

有没有办法做到这一点?

谢谢!

最佳答案

您可以通过存储绘图对象,然后将其打印两次来完成此操作。每次添加一个选项 coord_cartesian :

orig_plot <- ggplot(data, aes(time, y)) + 
geom_line()

early <- orig_plot + coord_cartesian(xlim = c(1982, 2000))
late <- orig_plot + coord_cartesian(xlim = c(2000, 2016))

这可以确保两个图都使用所有数据。

要将它们绘制在同一页面上,请使用 grid(我从 ggplot2 书中得到了这个,这可能是某处的 pdf):
library(grid)
vp1 <- viewport(width = 1, height = .5, just = c("center", "bottom"))
vp2 <- viewport(width = 1, height = .5, just = c("center", "top"))
print(early, vp = vp1)
print(late, vp = vp2)

关于r - 使用 ggplot2 在多个面板中划分长时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006606/

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