为ggplot2中的每个面板添加一条具有不同截距的垂直线
我正在使用 ggplot2 创建直方图面板,并且我希望能够在每组的平均值处添加一条垂直线。但是 geom_vline() 对每个面板使用相同的截距(即全局平均值):
require("ggplot2")
# setup some sample data
N <- 1000
cat1 <- sample(c("a","b","c"), N, replace=T)
cat2 <- sample(c("x","y","z"), N, replace=T)
val <- rnorm(N) + as.numeric(factor(cat1)) + as.numeric(factor(cat2))
df <- data.frame(cat1, cat2, val)
# draws a single histogram with vline at mean
qplot(val, data=df, geom="histogram", binwidth=0.2) +
geom_vline(xintercept=mean(val), color="red")
# draws panel of histograms with vlines at global mean
qplot(val, data=df, geom="histogram", binwidth=0.2, facets=cat1~cat2) +
geom_vline(xintercept=mean(val), color="red")
如何让它使用每个面板的组平均值作为 x 截距? (如果您还可以在包含平均值的行旁添加文本标签,则可获得奖励积分。)
I'm using ggplot2 to create panels of histograms, and I'd like to be able to add a vertical line at the mean of each group. But geom_vline() uses the same intercept for each panel (i.e. the global mean):
require("ggplot2")
# setup some sample data
N <- 1000
cat1 <- sample(c("a","b","c"), N, replace=T)
cat2 <- sample(c("x","y","z"), N, replace=T)
val <- rnorm(N) + as.numeric(factor(cat1)) + as.numeric(factor(cat2))
df <- data.frame(cat1, cat2, val)
# draws a single histogram with vline at mean
qplot(val, data=df, geom="histogram", binwidth=0.2) +
geom_vline(xintercept=mean(val), color="red")
# draws panel of histograms with vlines at global mean
qplot(val, data=df, geom="histogram", binwidth=0.2, facets=cat1~cat2) +
geom_vline(xintercept=mean(val), color="red")
How can I get it to use each panel's group mean as the x-intercept? (Bonus points if you can also add a text label by the line with the value of the mean.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想这确实是 @eduardo 的重写,但只有一行。
替代文本 http://www.imagechicken.com/uploads/1264782634003683000.png
或使用
plyr< /code> (
require(plyr)
ggplot 作者 Hadley 的一个包):vline 没有在切面上切割,这似乎令人不满意,我不知道为什么。
I guess this is a reworking of @eduardo's really, but in one line.
alt text http://www.imagechicken.com/uploads/1264782634003683000.png
or using
plyr
(require(plyr)
a package by the author of ggplot, Hadley):It seems unsatisfying that vline isn't cut on the facets, I'm not sure why.
一种方法是预先使用平均值构建 data.frame。
One way is to construct the data.frame with the mean values before hand.