【问题标题】:how to combine in ggplot line / points with special values?如何在 ggplot 线/点中结合特殊值?
【发布时间】:2016-08-18 09:50:06
【问题描述】:

我对 ggplot 还很陌生,但我喜欢系统地构建绘图的方式。尽管如此,我仍在努力实现预期的结果。我可以复制有分类数据的图。但是,对于我的使用,我经常需要将模型拟合到某些观察结果,然后在组合图中突出显示它们。使用通常的绘图功能,我会这样做:

library(splines)
set.seed(10)

x <- seq(-1,1,0.01)
y <- x^2
s <- interpSpline(x,y)
y <- y+rnorm(length(y),mean=0,sd=0.1)



plot(x,predict(s,x)$y,type="l",col="black",xlab="x",ylab="y")
points(x,y,col="red",pch=4)
points(0,0,col="blue",pch=1)
legend("top",legend=c("True Values","Model values","Special Value"),text.col=c("red","black","blue"),lty=c(NA,1,NA),pch=c(4,NA,1),col=c("red","black","blue"),cex = 0.7)

我最大的问题是如何为 ggplot 构建数据框,然后自动绘制图例?在此示例中,我如何将其转换为 ggplot 以获得类似的图?还是 ggplot 不是为这种地块制作的?

请注意,这只是一个玩具示例。通常模型值来自更复杂的模型,以防万一您想在 ggplot 中使用统计数据。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这里的关键部分是您可以通过提供一个字符串来映射aes 中的颜色,这将产生一个图例。在这种情况下,不需要在 data.frame 中包含特殊值。

    df <- data.frame(x = x, y = y, fit = predict(s, x)$y)
    
    ggplot(df, aes(x, y)) + 
      geom_line(aes(y = fit, col = 'Model values')) +
      geom_point(aes(col = 'True values')) + 
      geom_point(aes(col = 'Special value'), x = 0, y = 0) +
      scale_color_manual(values = c('True values' = "red", 
                                    'Special value' = "blue", 
                                    'Model values' = "black"))
    

    【讨论】:

    • 我刚刚注意到,如果我想在特殊值下添加两对,即 $(0,0), (1,1)$,则此解决方案不起作用。然后我得到一个错误,美学必须是长度1或与数据相同
    • 制作第二个data.frame,例如df2 &lt;- data.frame(x = 0:1, y = 0:1) 并使用 geom_point(data = df2, aes(col = 'Special value')) 绘制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2021-11-23
    • 2020-04-29
    • 2020-12-13
    相关资源
    最近更新 更多