【问题标题】:R ggplot2 - geom_smooth with gradient color from a third continuous variableR ggplot2 - 来自第三个连续变量的渐变颜色的 geom_smooth
【发布时间】:2017-04-23 03:56:59
【问题描述】:

有没有办法绘制平滑曲线 (x=var1, y=var2) 并根据第三个连续变量 (z=var3) 对其着色?我正在使用以下代码:

    library(ggplot2)

    x = runif(100,-20,20)
    y = 2*x+x^2+rnorm(100,0,50)
    z = 0.5*x+rnorm(100,0,2)
    df = data.frame(x=x,y=y,z=z)

    ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=z),se=F) 

但是,平滑线仍然是纯蓝色。

使用内部变量“..y..”而不是 var3 相对于 var2 为行着色。

    ggplot(data=df,aes(x=x,y=y))+geom_smooth(method='loess', aes(color=..y..),se=F) 

是否有另一个内部变量可以调用以根据 var3 为线着色?

我可以使用geom_line 生成所需的图,但我希望将其平滑。

【问题讨论】:

  • make your example reproducible添加一些数据。
  • 您可以用不同的颜色绘制各个数据点,但geom_smooth 怎么知道如何为曲线的哪一部分着色?
  • 您提供的信息很少,但试试这个:aes(color=factor(var3))。如果这对您的数据集有正确的含义,我们无法判断。
  • geom_smooth 没有直接连接到 var3 所以不,您不能以这种方式执行此操作。但是,您可以在 df 中创建一个额外的列,并在将 var3 映射到颜色时使用 geom_line 进行绘图。

标签: r ggplot2


【解决方案1】:

您使用geom_line 走在正确的轨道上,您只需要在预先平滑的数据上使用它。如上所述获取您的数据框,然后:

df$predict <- predict(loess(y~x, data = df))

ggplot(df, aes(x = x,y = predict)) +
  geom_line(aes(colour = z)) 

如果您的x 有很大差距,这可能会产生丑陋的结果;它们将作为点之间的平坦部分出现。通过将newdata= 提供给predict() 并将其存储在第二个数据帧中,有一些解决方法,但是您还需要为这些新的x 值重新计算z

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2023-03-04
    • 2017-10-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多