通过累积分布的中值添加垂直线(ggplot2)

时间:2014-05-01 16:54:53

标签: r ggplot2

我正在使用ggplot2在单个图上绘制两个累积分布。使用?stat_ecdf中的示例很简单。我的困难在于通过每个分布的中值添加垂直线。

使用单一发行版很容易做到这一点:

df <- data.frame(x = c(rnorm(100, 5, 10), rnorm(200, 0, 10)),
  g = as.factor(c(rep(1, 100), rep(2, 200))))

ggplot(df, aes(x)) +
  stat_ecdf() + 
  geom_vline(aes(xintercept = median(x)))

但我无法找到一种为多个发行版添加垂直线的简单方法。我尝试了以下但没有成功:

ggplot(df, aes(x, colour = g)) +
  stat_ecdf() +   
  geom_vline(aes(xintercept = median(x), colour = g))

我可以通过分阶段组合情节来获得所需的结果:

p <- ggplot(df[df$g == 1, ], aes(x)) +
  stat_ecdf() + 
  geom_vline(aes(xintercept = median(x)))

p + 
  stat_ecdf(data = df[df$g == 2, ]) +
  geom_vline(data = df[df$g == 2, ], aes(xintercept = median(x)))

但这似乎是一种不整洁的做法,也让我手工设置不同的线条颜色。

当然有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

试试这个:

ggplot(df, aes(x, colour = g)) +
    stat_ecdf() +   
    geom_vline(aes(xintercept = median(x[g==1]), color=g[g==1])) + 
    geom_vline(aes(xintercept = median(x[g==2]), color=g[g==2]))

通过添加第二个geom_vline参数并指定每个行和颜色所指的组,您可以获得具有相应颜色的两行。希望有所帮助!