문제

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 절편으로 사용하도록하려면 어떻게해야합니까? (보너스 포인트는 평균 값이있는 선으로 텍스트 레이블을 추가 할 수 있다면.)

도움이 되었습니까?

해결책

한 가지 방법은 손에 평균 값으로 데이터를 구성하는 것입니다.

library(reshape)
dfs <- recast(data.frame(cat1, cat2, val), cat1+cat2~variable, fun.aggregate=mean)
qplot(val, data=df, geom="histogram", binwidth=0.2, facets=cat1~cat2) + geom_vline(data=dfs, aes(xintercept=val), colour="red") + geom_text(data=dfs, aes(x=val+1, y=1, label=round(val,1)), size=4, colour="red")

다른 팁

나는 이것이 @Eduardo 's의 재 작업 인 것 같지만 한 줄로 생각합니다.

ggplot(df) + geom_histogram(mapping=aes(x=val)) 
  + geom_vline(data=aggregate(df[3], df[c(1,2)], mean), 
      mapping=aes(xintercept=val), color="red") 
  + facet_grid(cat1~cat2)

대체 텍스트 http://www.imagechicken.com/uploads/1264782634003683000.png

또는 사용 plyr (require(plyr) GGPLOT, Hadley의 저자의 패키지) :

ggplot(df) + geom_histogram(mapping=aes(x=val)) 
  + geom_vline(data=ddply(df, cat1~cat2, numcolwise(mean)), 
      mapping=aes(xintercept=val), color="red") 
  + facet_grid(cat1~cat2)

vline이 패싯에 절단되지 않았다는 것은 불만족스러운 것 같습니다. 왜 그런지 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top