我正在尝试创建一个颜色渐变因x轴和y轴而变化的图。更具体地说,我正在尝试设置渐变,使色调范围沿x轴变化,值沿y轴变化。
举个例子,我正在使用正弦曲线,-pi
到pi
附近有一些噪音。
set.seed(5678)
x <- seq(-1*pi, 1*pi, 0.01)
y <- sin(x) + rnorm(length(y))
df <- cbind.data.frame(x, y)
ggplot(df, aes(x=x, y=y)) + geom_line()
现在我想对线条进行着色,使色调沿着x轴从红橙色变为橙黄色到黄绿色等,然后根据其y值取出该范围内的不同值。因此,在x=-pi
,y=2
可能为红色而y=-2
可能为黄色,x=0
时,y=2
可能为绿色,y=-2
可能为蓝色
是否有人试图创建这样的图形?
答案 0 :(得分:3)
这是一个使用从x和y计算的色调的选项:
df$hue <- pmax(pmin((df$x + pi)/pi/3 + (2 - df$y) / 12, 1), 0)
ggplot(df, aes(x=x, y=y, group = 1, colour = hsv(hue, 1, 1))) + geom_path() +
scale_colour_identity()
请注意,因为这些线条在垂直方向上很长,所以效果并不完全可见。这是使用approx
进行插值的版本:
adf <- as.data.frame(approx(df, xout = seq(-pi, max(df$x), 0.001)))
adf$hue <- pmax(pmin((adf$x + pi)/pi/3 + (2 - adf$y) / 12, 1), 0)
ggplot(adf, aes(x=x, y=y, group = 1, colour = hsv(hue, 1, 1))) + geom_path() +
scale_colour_identity()
在这两种情况下,它都依赖于x
和y
的色调,值保持不变。这符合您提出的示例,如果不是您的原始描述。显然,它可以根据不同的色调和价值进行定制。值得注意的是,需要设置group
。否则ggplot2
会尝试将所有相同颜色的点连接在一起。