使用R

时间:2015-07-29 16:42:55

标签: r ggplot2

我正在尝试创建一个颜色渐变因x轴和y轴而变化的图。更具体地说,我正在尝试设置渐变,使色调范围沿x轴变化,值沿y轴变化。

举个例子,我正在使用正弦曲线,-pipi附近有一些噪音。

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=-piy=2可能为红色而y=-2可能为黄色,x=0时,y=2可能为绿色,y=-2可能为蓝色

是否有人试图创建这样的图形?

1 个答案:

答案 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()

hue plot

在这两种情况下,它都依赖于xy的色调,值保持不变。这符合您提出的示例,如果不是您的原始描述。显然,它可以根据不同的色调和价值进行定制。值得注意的是,需要设置group。否则ggplot2会尝试将所有相同颜色的点连接在一起。