2013-12-11 21 views
6

Bu grafiğe sahibim - gözlem sayısını göstermek için her etikete N=xx metnini eklemek istiyorum. Bunu nasıl yapacağımı biliyorum ve bunu hiçbir şeye sahip olmayan grafiklerde yaptım. Ben işe yaramadı yönlü grafik üzerinde, yani denedikHer yönüyle x ekseni etiketlerini değiştirin

(Tüm 3 listelerinde açık kene aynı N var Sınırlı aynı N, vb)

Birisi can umut Bir çözüm yolunu işaretleyin, belirli bir yüzdeki elemanları nasıl kontrol ederim?

library(ggplot2) 
library(scales) 

stat_sum_single <- function(fun, geom="point", ...) { 
    stat_summary(fun.y=fun, fill="red", geom=geom, size = 5, shape=24) 
} 

set.seed(1) 
data1 <- data.frame(Physicians_In=sample(1:3,100,replace=T),Physicians_Out=sample(1:3,100,replace=T),share=runif(100,0,1)) 
data1$Physicians_In <- factor(data1$Physicians_In,levels=c(1,2,3),labels=c("Open","Restricted","Closed")) 
data1$Physicians_Out <- factor(data1$Physicians_Out,levels=c(1,2,3),labels=c("Open","Restricted","Closed")) 

access_ch3 <- ggplot(data1,aes(x=Physicians_In,y=share,fill=Physicians_In))+geom_boxplot()+stat_sum_single(mean) 
access_ch3 <- access_ch3 +geom_jitter(position = position_jitter(width = .2),color="blue")+theme_bw() 
access_ch3 <- access_ch3 + theme(legend.position="none") +scale_y_continuous("Gammagard Share",labels=percent) 
gpo_labs5 <- paste(gsub("/","-\n",names(table(data1$Physicians_Out)),fixed=T),"\n(N=",table(data1$Physicians_Out),")",sep="") 
access_ch3 <- access_ch3 + scale_x_discrete("Physician Access (In Hospital)",labels=gpo_labs5) 
access_ch3 <- access_ch3 +facet_grid(.~Physicians_Out,labeller=label_both) 
access_ch3 

bunun da sorunu çözmez bu yüzden, 9 etiketler oluşturmak ve sadece ilk 3 geri scale_x_discrete elemanı, bu vektör geçen çalıştı. Aynı veriler sayesinde

+1

mi belli değil. Eksen keneler veya faset etiketleri değiştirmek ister misiniz? – agstudy

+0

Eksen kene etiketleri - Açık için ilk cetvelde 6 gözlem var, "Açık (N = 6)" göstermesini istiyorum, eğer ikinci Açık 9 ise "açık (N = 9)" olacaktı – user1617979

cevap

7

Bu tam olarak ne yapmak istediğinizi değil, ama bu yardımcı olabileceğini düşünüyoruz (en azından iyi bir başlangıç)

library(ggplot2) 
library(plyr) 
data1 <- ddply(data1,.(Physicians_Out,Physicians_In),transform,label = length(share)) 
ggplot(data1,aes(x=Physicians_In,y=share,fill=Physicians_In))+ 
    geom_boxplot() + 
    stat_sum_single(mean) + 
    facet_grid(.~Physicians_Out,labeller=label_both,scales='free_x') + 
    stat_summary(fun.y=min,aes(label=paste0('N=',label)),geom='text',col='blue',cex=5) 

enter image description here

+0

cevabı için teşekkürler, – user1617979

+1

@ user1617979 gösterdiğim kutuların her biri için gözlem sayısını eklemek istiyorum. Cevabımı tamamen değiştirdim. – agstudy

+1

teşekkürler, bu gerçekten harika çalışıyor ve facet_grid kullanımına izin verdiği için bunu seviyorum. Stat_summary'da aes() ifadesinin içine y = 0 ekleyerek bunları en altta hizalayabildim. Ben de alışkın olmadığım ddply'daki dönüşümü nasıl kullanacağımı öğrendim (beni bir çok kez birleştirecek) – user1617979

7

Ben dört adımlı bir yaklaşım izledi .

İlk: subsetting veri

open <- subset(data1, Physicians_Out == "Open") 
restr <- subset(data1, Physicians_Out == "Restricted") 
closed <- subset(data1, Physicians_Out == "Closed") 

İkincisi: Farklı alt kümeleri

için etiketler oluşturma
labs.open <- paste(gsub("/","-\n",names(table(open$Physicians_In)),fixed=T), 
       "\n(N=",table(open$Physicians_In),")",sep="") 
labs.restr <- paste(gsub("/","-\n",names(table(restr$Physicians_In)),fixed=T), 
       "\n(N=",table(restr$Physicians_In),")",sep="") 
labs.closed <- paste(gsub("/","-\n",names(table(closed$Physicians_In)),fixed=T), 
       "\n(N=",table(closed$Physicians_In),")",sep="") 

Üçüncüsü: y eksenini kaldırılması için bir tema oluşturarak 2 & için & metni etiketler 3 alt grafikler

mytheme <- theme(
    axis.title.y = element_blank(), 
    axis.text.y = element_blank(), 
    axis.ticks.y = element_blank() 
) 

Fin müttefiki: grafiğini şu sonuç verir

p1 <- ggplot(open,aes(x=Physicians_In,y=share,fill=Physicians_In)) + 
    geom_boxplot() + stat_sum_single(mean) + 
    geom_jitter(position = position_jitter(width = .2),color="blue") + 
    guides(fill=FALSE) + 
    ggtitle(paste("Physician Access (Out): Open\nN = (", nrow(open), ")\n")) + 
    scale_y_continuous("Gammagard Share",labels=percent) + 
    scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.open) + 
    theme_bw() 

p2 <- ggplot(restr,aes(x=Physicians_In,y=share,fill=Physicians_In)) + 
    geom_boxplot() + stat_sum_single(mean) + 
    geom_jitter(position = position_jitter(width = .2),color="blue") + 
    guides(fill=FALSE) + 
    ggtitle(paste("Physician Access (Out): Restricted\nN = (", nrow(restr), ")\n")) + 
    scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.restr) + 
    theme_bw() + mytheme 

p3 <- ggplot(closed,aes(x=Physicians_In,y=share,fill=Physicians_In)) + 
    geom_boxplot() + stat_sum_single(mean) + 
    geom_jitter(position = position_jitter(width = .2),color="blue") + 
    guides(fill=FALSE) + 
    ggtitle(paste("Physician Access (Out): Closed\nN = (", nrow(closed), ")\n")) + 
    scale_x_discrete("\nPhysician Access (In Hospital)",labels=labs.closed) + 
    theme_bw() + mytheme 

library(gridExtra) 

grid.arrange(p1, p2, p3, ncol=3) 

oluşturarak:

enter image description here

İlgili konular