【问题标题】:Varying gradient using ggplot2 in R在 R 中使用 ggplot2 改变梯度
【发布时间】:2015-07-29 16:42:54
【问题描述】:

我正在尝试创建一个颜色渐变随 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=0y=2 可能是绿色,y=-2 可能是蓝色。

有没有人尝试过创建这样的图表?

【问题讨论】:

  • 不完全是您要查找的内容,但您可以尝试将 color 映射到 x 和 y 的交互; df$xy &lt;- x + y ; ggplot(df, aes(x=x, y=y,color=xy)) + geom_line() + scale_color_gradientn(colours=(c("red","orange","yellow","green")))
  • colorRampPalettecols &lt;- colorRampPalette(c("red", "orange", "yellow", "green"))(length(x)); ggplot(df, aes(x=x, y=y)) + geom_line(color=cols) + theme_bw()类似
  • @nongkrong 但颜色仅沿 x 轴变化,而 OP 希望它沿两个轴变化
  • @scoa 哦,好的,那么交互不起作用吗?
  • @nongkrong 这不是他们所要求的:通过交互,数据点 x=1 y=2 的颜色将与 x=2 y=1 的颜色相同。

标签: r ggplot2


【解决方案1】:

这是一个使用从 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()

在这两种情况下,色调都取决于xy,值保持不变。如果不是您的原始描述,那符合您提出的示例。显然,它可以定制为分别改变色调和价值。还值得注意的是,需要有一个group 集。否则ggplot2 会尝试将所有相同颜色的点连接在一起。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多