是否可以在R中使用ggplot将颜色渐变应用于geom_smooth?

Mar*_*n S 5 r ggplot2

我想将比例颜色渐变应用于平滑线.目前,下面的代码将颜色修复设置为红色.

library(ggplot2)
a <- data.frame(year = 1:100, values = sin(1:100)*1000 + runif(100))
ggplot(a, aes(x = year, y = values, color = values )) + geom_line(size = 2)  +
scale_colour_gradient2(
  low = "blue",
  mid = "white" ,
  high = "red",
  midpoint = 10
 )+
geom_smooth(
 data = a,
 aes(x = year, y = values),
 color = "red",
 size = 2
 )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,当我设置color = values它不起作用.相反,它采用默认的蓝色.

geom_smooth(
 data = a,
 aes(x = year, y = values, color = values),
 size = 2
 )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

提前致谢.

eip*_*i10 10

使用geom_smooth(aes(color=..y..))的颜色美学增加geom_smooth...y..是由内部计算的y值向量,geom_smooth用于创建回归曲线.通常,当您想要将美学添加到内部计算的汇总值时,您需要将美学映射到该内部值.这里,内部值是..y..平滑函数的值.在其他情况下,它可能是..count..直方图或条形图,或..density..密度图.

这是使用您的数据的示例.请注意,我已经调整了一些绘图参数以供说明.

set.seed(48)
a <- data.frame(year = 1:100, values = sin(1:100)*1000 + runif(100))

ggplot(a, aes(x = year, y = values, color = values )) + 
  geom_line(size = 0.5)  +
  geom_smooth(aes(color=..y..), size=1.5, se=FALSE) +
  scale_colour_gradient2(low = "blue", mid = "yellow" , high = "red", 
                         midpoint=10) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,回归线的颜色变化不大,因为其y值相对于数据的范围较小.这是假数据的另一个例子,它产生更广泛的回归曲线.

set.seed(1938)
a2 <- data.frame(year = seq(0,100,length.out=1000), values = cumsum(rnorm(1000)))

ggplot(a2, aes(x = year, y = values, color = values )) + 
  geom_line(size = 0.5)  +
  geom_smooth(aes(color=..y..), size=1.5, se=FALSE) +
  scale_colour_gradient2(low = "blue", mid = "yellow" , high = "red", 
                         midpoint=median(a2$values)) +
  theme_bw()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述