如何在第二个y轴上添加第二条平滑线,并使用ggplot2在第一条y轴上对其进行缩放?

我有一个数据框df,该数据框总结了鱼类的活动activity以及与水列中与该活动相关的当前强度C.I和当前方向C.D 。作为数据框的示例:

df<- data.frame(C.D=c(5,5,10,20,40,80,100,130,160,190,220,250,280,310,340,359,359),activity=c(1.1,1.6,0.6,1.2,1.8,1.3,1.4,1.88,0.99,2.1,1.75,1.5,2.4,1.55,0.9,3.2,1.7,3.8,2.8,3.9,3.4,2.6,4.1,2.3,3.6,4.3,3.0,2.5,1.1,0.5,0.8,1.5),C.I=c(0.05,0.21,0.11,0.2,0.15,0.28,0.24,0.18,0.33,0.22,0.13,0.16,0.31,0.23,0.36,0.25,0.58,0.42,0.52,0.82,0.71,0.64,0.51,0.4,0.54,0.55,0.68,0.32,0.37,0.04,0.12))

df

   C.D activity  C.I
1    5     1.10 0.05
2    5     1.60 0.21
3    5     0.60 0.11
4   10     1.20 0.20
.    .       .    .
.    .       .    .
.    .       .    . 

我想探讨电流C.D的方向是否影响我鱼类的活动。例如,如果某个C.D的活动比其他活动高。但是,由于C.DC.I可能非常相关(对于某些C.D,电流C.I的强度可能高于其他强度),因此我需要添加绘制有关C.I的信息,以解释我看到的是由于变量C.D的影响还是由于第三个变量C.I的影响。

作为第一近似值,我绘制了C.Dactivity之间的关系点,并添加了一条平滑线以查看总体趋势。我还根据C.I对点进行了着色,以查看颜色是否遵循某种模式(例如,如果特定的颜色集中在特定的C.D中,这意味着某些C.I仅在特定的情况下出现C.D)。在此示例中,C.I的高C.D ara在140和250等级之间。代码和图像如下:

P<- ggplot(df,aes(C.D,activity)) +
  geom_point(aes(C.D,activity,color = C.I)) + scale_colour_gradientn(colours=c("green","black")) + theme_bw()
P<- P +  geom_smooth()  +
  ggtitle("Mean activity as a function of C.D.20m for winter from hourly data") +
  theme(plot.title = element_text(hjust = 0.5)) 

如何在第二个y轴上添加第二条平滑线,并使用ggplot2在第一条y轴上对其进行缩放?

当我必须绘制成千上万个点时,就会出现我的问题,因为从那时起,为这些点使用颜色来显示与C.I相关的任何C.D模式是不合适的。这里显示了我的数据的真实图:

如何在第二个y轴上添加第二条平滑线,并使用ggplot2在第一条y轴上对其进行缩放?

我的问题是我如何添加关于第一个y轴缩放的第二条平滑线,以显示C.DC.I之间的关系。到目前为止,我已经知道了:

P<- P + geom_smooth(aes(C.D,C.I),color="red",se=FALSE)
P

如何在第二个y轴上添加第二条平滑线,并使用ggplot2在第一条y轴上对其进行缩放?

是否可以缩放第二个y轴以改善解释?

rlh834844153 回答:如何在第二个y轴上添加第二条平滑线,并使用ggplot2在第一条y轴上对其进行缩放?

首先,我想指出其他地方在this answer中表示的辅助轴所伴随的常见警告。

仅仅是变换数据并逆变换辅助轴是不合适的吗?

请注意6是转换的任意数字,以使数据看起来合理。

ggplot(df,aes(C.D,Activity)) +
  geom_point(aes(C.D,Activity,color = C.I)) + 
  scale_colour_gradientn(colours=c("green","black")) + 
  theme_bw() + 
  geom_smooth()  +
  ggtitle("Mean activity as a function of C.D.20m for winter from hourly data") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_smooth(aes(C.D,C.I * 6),se=FALSE,colour = "red",show.legend = TRUE) +
  scale_y_continuous(sec.axis = sec_axis(trans = ~ . / 6,name = "CI"))

enter image description here

编辑:对于这些行的正确说明,恐怕您将不得不做一些手动指定(除非其他人有一个更优雅的解决方案):

ggplot(df,"black")) + 
  theme_bw() + 
  geom_smooth(aes(linetype = "Activity"))  +
  ggtitle("Mean activity as a function of C.D.20m for winter from hourly data") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_smooth(aes(C.D,C.I * 6,linetype = "C.I."),name = "CI")) +
  scale_linetype_manual(
    values = c(1,1),guide = guide_legend(override.aes = list(colour = c("blue","red")))
  )

enter image description here

本文链接:https://www.f2er.com/3102835.html

大家都在问