我在 ggplot2 中创建了一个带有两个 y 轴的折线图,并且只希望将一个数据集(蓝色)绘制在反向轴上,并希望将另一个数据集(红色)绘制在与第一个数据集不同的比例上。然而,我正在使用的代码反转了两个轴,尽管第二个 y 轴已被编码为具有不同的比例,但第二个数据集(红色)正在使用第一个 y 轴的比例进行绘制。此外,我创建了一条线(绿色),我必须确定蓝线与它相交的位置。我知道这个问题的后半部分之前已经被问过并得到了回答,但是在那篇文章中指出该解决方案实际上不起作用。任何输入都会有帮助!谢谢你!我提供了一个示例数据集,因为我的数据集太大而无法重新创建。
time<-c(1,2,3,4,5,6,7,8,9,10)
height<-c(100,330,410,570,200,270,230,390,400,420)
temp<-c(37,33,14,12,35,34,32,28,26,24)
tempdf<-data.frame(time,height,temp)
makeplot<-ggplot(tempdf,aes(x=time)) + geom_line(aes(y=height),color="Blue")
+ geom_line(aes(y=temp),color="Red")+
scale_y_continuous(sec.axis=sec_axis(~./100,name =
"Temperature"),trans="reverse")+
geom_hline(aes(yintercept=250), color="green")
最佳答案
ggplot 只会进行 1:1 轴变换,如果它翻转一个轴,也会翻转两个轴,因此您需要找出一个方程来平移轴。乘(或除)负数会将温度轴翻转回标准递增比例。这两个方程可用于获取相同规模的样本数据。
height = temp*(-10) + 600
temp = (height - 600)/(-10)
现在,您可以将方程合并到绘图代码中,第一个将温度数据转换为适合高度比例的数字,第二个将辅助轴数字转换为显示温度的比例。
makeplot<-ggplot(tempdf,aes(x=time)) +
geom_line(aes(y=height),color="blue") +
geom_line(aes(y = (temp*(-10)) + 600), color="red")+
scale_y_continuous(sec.axis=sec_axis(~(.-600)/(-10),name =
"Temperature"),trans="reverse")+
geom_hline(aes(yintercept=250), color="green")
makeplot
关于r - ggplot双反转y轴和geom_hline截距计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393426/