是否可以使用R中的ggplot将颜色渐变应用于geom_smooth?
问题描述:
我想将比例颜色渐变应用到平滑线上。 此刻下面的代码将颜色修复设置为红色。是否可以使用R中的ggplot将颜色渐变应用于geom_smooth?
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
)
但是,当我设置color = values
这是行不通的。相反,它需要默认的蓝色。
geom_smooth(
data = a,
aes(x = year, y = values, color = values),
size = 2
)
在此先感谢。
答
使用geom_smooth(aes(color=..y..))
为geom_smooth
添加颜色审美。 ..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()
注意,回归直线的颜色不会改变很多,因为它的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()
非常感谢。这正是我正在寻找的。 –