使用法线和反向 y 轴绘图

时间:2021-02-11 12:20:12

标签: r

我有包含每日降水和排放数据的数据集。现在我想在一个图中绘制所有内容。所有数据集的长度为 61,因此它们可以共享相同的 x 轴。放电数据应以“正常”方式绘制,这意味着 y 轴从底部开始并位于左侧。降水数据应该“从顶部”绘制,这意味着 y 轴被反转并放置在右侧。

这是一个最小可重现示例的一些代码:

precipitation <- runif(61, min=0, max=25)
discharge <- runif(61, min=370, max=2610)

结果应该大致如下:

enter image description here

有人知道如何实现这一目标吗?

编辑:感谢 pascal 的回答,暗示了 ggplot2 的使用。

我还自己找到了一种使用 Base R 来实现的方法,以防将来它可以帮助任何人:

precipitation <- runif(61, min=0, max=25)
discharge <- runif(61, min=370, max=2610)

# plot with Base R
par(mar = c(5, 5, 3, 5), xpd = TRUE)
plot(precipitation, type= "l", ylim= c(0,80), ylab= "Precipitation [mm/day]", main= "Comparison", 
     xlab= "Day", col= "blue") 
par(new = TRUE)
plot(discharge, type= "l", xaxt = "n", ylim= rev(c(0,5000)), yaxt = "n", ylab = "", xlab = "", col= "red", lty= 2)
axis(side = 4)
mtext("Discharge [m³/s]", side = 4, line = 3)

ggplot2 方式当然看起来更漂亮。

1 个答案:

答案 0 :(得分:1)

ggplot2 可用于绘制带有第二个倒轴的图。必须在 sec.axis 中指定 scale_y_continuous()。我正在为您的数据使用转换 ((100-x)*100) 并将其应用于轴,以便它适合。这可以更改为任何数字。

ggplot() +
geom_line(aes(y=precipitation, x=1:61), col="orange") + 
geom_line(aes(y=100-discharge/100, x=1:61), col="blue") +
scale_y_continuous(name="rain", sec.axis=sec_axis(~(100-.)*100, name= "discharge"))

enter image description here