ggplot为绘图添加两条平均线

时间:2015-04-06 15:09:35

标签: r ggplot2

我有以下

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

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

1 个答案:

答案 0 :(得分:4)

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

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")

Plot

你也可以使用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")

这使得该行不会“延伸”:

Plot 2