1
我正在使用ggplot2在單個圖上繪製兩個累積分佈。使用?stat_ecdf
的示例,這很簡單。我的困難在於通過每個分佈的中值添加垂直線。通過累積分佈的中間值添加垂直線(ggplot2)
這是很容易用一個單一的分佈要做到這一點:
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)))
但這似乎這樣做也是一個凌亂的方式讓我手動設置不同的線條顏色。
當然有更好的方法嗎?
這是有幫助的,因爲我不知道你可以在ggplot2中使用方括號這樣的子集!不幸的是,雖然這個答案適用於我的原始示例數據,但它給我的實際數據帶來了一個錯誤:_arguments意味着不同數量的rows_。我編輯了示例數據以反映每個級別中不同數量的值。 – Nicholas
@Nicholas通過從'median'和'color'參數中刪除括號子集來代替'geom_vline'對象,而代之以包括'data = df [df $ g == 1,],'(或'data = df [df $ g == 2,],'第二個)在你的aes參數之前。這將爲每一行分配數據並允許每個數據長度不同。實線應該看起來像這樣:'geom_vline(data = df [df $ g == 1,],aes(xintercept = median(x),color = g))'&'geom_vline(data = df [df $ g == 2,],aes(xintercept = median(x),color = g))' – rmbaughman