如何使用ggplot2实现次坐标轴的缩放,且该次坐标轴具有负值

3
当我绘制第二个y轴时,数据集中的负值将低于其他绘制的数据。 我想让这两个数据集从同一基线开始,但具有不同的轴刻度。
我尝试过对数据进行缩放,但无法实现我的目标。 我对ggplot2包不是很熟悉。 根据所示代码,我认为我正在使用与降水相同的比例绘制温度数据。
# Enter climate data to be graphed
month <- month.abb[c(1,2,3,4,5,6,7,8,9,10,11,12)]
month <- ordered(month, month.abb)
aveT <- c(-2.7, -0.9, 3.1, 7.3, 11.9, 15.7, 20.2, 19.8, 14.4, 7.6, 1.2, -3.6)
precip <- c(46.2, 30.5, 23.9, 21.1, 41.1, 40.1, 26.7, 21.6, 24.6, 22.4, 36.6, 38.6)

#Set the dataframe
df <- data.frame(month, aveT, precip)

#Graph precipitation data as bar graph
g <- ggplot(df) 
g <- g + geom_bar(aes(x=month, y=precip), stat="identity", fill="blue", color="black") + theme_bw() + theme(panel.grid = element_blank())
g <- g + ylim(0, 50)

#Add Temperature data
g <- g + geom_line(aes(x=month, y=aveT, group=1), color="red", size=1.5)
g <- g + scale_y_continuous(sec.axis = sec_axis(~.*1, name = "Temperature (C)"))

结果是温度曲线图的负值低于降水柱状图的数值。我希望主轴从0到50,次轴从-5到25,但在同一位置起始。 resulting graph
1个回答

3
设置次要刻度不会改变您创建的第二行。您需要转换数据,然后通过执行转换的逆操作来绘制和调整辅助轴。
例如,我们希望将y轴限制从0到50更改为-5到20。为此,我们使用aveT = y / 2 - 5转换y轴值以获取aveT的新值。要转换原始的aveT数据点,我们必须执行逆转换:y = (aveT + 5) * 2。因此,代码应如下所示:
g <- g + geom_line(aes(x=month, y=(aveT + 5) *2 , group=1), color="red", size=1.5)
g <- g + scale_y_continuous(sec.axis = sec_axis(~./2-5, name = "Temperature (C)"))

enter image description here


这绝对是我正在寻找的,谢谢!我在想是否有一种方法可以将轴值(限制)从-5更改为25。在当前比例下,二次轴上有一半的图形空间未被使用。 - M. Wein
@M.Wein 我更新了帖子,更详细地解释了如何完成。我将限制从-5设置为20,因为这更简单且填充了图形。您可以使用相同的逻辑将其更改为任何您想要的限制。 - busybear
谢谢!我猜看数字比与df相关联更容易理解。 - M. Wein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接