如何在一个网格中绘制多个时间序列图,其中每个图都有两个y轴?

时间:2018-08-29 17:08:02

标签: r plot grid time-series yaxis

我需要在同一页上绘制几个时间序列图,每个时间图都在其自己的面板中,网格为3x2或类似形状。在后一种情况下,我将在3行2列的页面上显示6个图表。我需要使用R,任何流行的情节库都可以。

此外,每个图表上都有多个时间序列。除一个时间序列外,所有时间序列都将在左侧缩放到y轴,而一个时间序列将以不同的比例缩放,其y标签在右侧。这类似于MATLAB中的plotyy命令。

我将需要自定义很多内容,例如颜色和线条类型。 R对于这种图表有什么解决方案?

1 个答案:

答案 0 :(得分:0)

使用ggplot2,我们可以使用facet_wrap来定义构面(面板),使用sec_axis来定义辅助轴。

library(ggplot2)

ggplot(dd, aes(x, y, col = id)) + 
  geom_line() + 
  facet_wrap(~ panel) +
  scale_y_continuous(sec.axis = sec_axis(~ . / 2))

注意

我们使用下面定义的dd作为上面的输入。 id定义系列,面板定义每个id应该放置的面板。

set.seed(123)
dd <- data.frame(x = 1:11, y = rnorm(44), 
  id =  gl(4, 11, labels = paste0("ser", 1:4)), 
  panel = gl(2, 22, labels = paste0("panel", 1:2)))