r - ggplot双反转y轴和geom_hline截距计算

标签 r ggplot2

我在 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")

enter image description here

最佳答案

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

enter image description here

关于r - ggplot双反转y轴和geom_hline截距计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393426/

相关文章:

r - Dplyr:在组内进行总结、变异和排名

r - 自定义列名称作为稳定性 R 包函数中的参数

r - 仅使用函数的非缺失参数应用过滤器

r - 如何在 ggplot2 中绘制具有正确间隔的连续 x 轴值的箱线图

r - ggplot2 多个 stat_smooth : change color & linetype

在不删除整行/列的情况下从数据框中删除 NA

r - 合并具有多个值的列

r - 使用 ggplot2 对 y 值进行分组的点图

r - 当geom_text不合适时如何在ggplot中放置百分比标签?

r - 如何在ggplot geoms中编写具有整洁评估的函数?