ggplot 为绘图添加两条平均线

ggplot add two mean lines for plot

我关注了

     RMSE      Model fold
1  0.4164260    lm    1
2  0.5412474    lm    2
3  0.3496156    lm    3
4  0.4431751    lm    4
5  0.4082882    lm    5
6  0.4398985    lm    6
7  0.4506528    lm    7
8  0.4236024    lm    8
9  0.4346417    lm    9
10 0.4982427    lm   10
11 0.3993842  MARS    1
12 0.5684007  MARS    2
13 0.3487462  MARS    3
14 0.4174607  MARS    4
15 0.3930033  MARS    5
16 0.4456201  MARS    6
17 0.4373339  MARS    7
18 0.4110089  MARS    8
19 0.4249311  MARS    9
20 0.4295155  MARS   10

我正在绘制如下:

ggplot(df, aes(x=factor(fold), y=RMSE, group=Model, colour=Model)) + geom_line()

我想为两个模型做平均线。我怎样才能做到这一点?

一种方法是创建一个包含手段的单独数据框:

library(ggplot2)
library(plyr)
df_means <- ddply(df, "Model", summarise, mean_RMSE = mean(RMSE))
#   Model mean_RMSE
# 1    lm 0.4405790
# 2  MARS 0.4275405

ggplot(df, aes(x=factor(fold), y=RMSE, group=Model, colour=Model)) + 
  geom_line() +
  geom_hline(data=df_means, aes(yintercept=mean_RMSE, color=Model), 
             linetype="dashed")

您还可以使用:geom_line() 和 "stat" 来绘制群体审美的方法(尽管您的控制力会降低):

ggplot(df, aes(x=factor(fold), y=RMSE, group=Model, colour=Model)) + 
  geom_line() +
  geom_line(stat="hline", yintercept="mean", linetype="dashed")

这保留了来自 "extending" 的行: