首页 > 解决方案 > 在 R 中布置多个具有不同比例的双 y 轴的图

问题描述

我用 ggplot2 绘制了三个数字,我喜欢将它们重新排列到一页。每个图形都有双 Y 轴,这些图形具有不同的第二个 Y 轴缩放比例。如果我使用 grid.arrange 或类似的函数,它将导致我的第一个和第二个图中的缺失值,这实际上将使用第三个图的第二个 Y 轴刻度。它是这样的:

重新排列的数字

但如果我单独做,它应该是:

个人形象

代码是这样的:

scaleFactor <- max(sum_PDSI$PDSI_1) / max(sum_PDSI$Yield_1)
plot1 <- ggplot(sum_PDSI,aes(Year)) +
  geom_line(aes(y=PDSI_1),color = "BLUE", size = 0.8) +
  geom_line(aes(y=Yield_1 * scaleFactor),color = "RED", size = 0.8) +
  scale_y_continuous(name="PDSI", limits = c(-8, 6), 
                     sec.axis=sec_axis(~./scaleFactor, name="Yield (BU/Acre)")) +
  theme_set(theme_grey()) +
  theme(axis.title.y.left=element_text(color="blue"),
        axis.text.y.left=element_text(color="blue"),
        axis.title.y.right=element_text(color="red"),
        axis.text.y.right=element_text(color="red")) +
  theme(axis.title.x = element_blank()) +
  annotate("text", x = 1982, y = 5, hjust = 0, size = 4, 
           label = "R = 0.46  P < 0.01") 

plot1

数据是:

sum_PDSI = data.frame(Year = 1981:2016, 
                      PDSI_1 = runif(36, -4, 4),
                      PDSI_2 = runif(36, -4, 4),
                      PDSI_3 = runif(36, -4, 4), 
                      Yield_1 = runif(36, -40, 80),
                      Yield_2 = runif(36, -1000, 1000),
                      Yield_3 = runif(36, -10, 20))

标签: rggplot2

解决方案


推荐阅读