2012-07-19 11 views
10

मैं के भीतर एक बाल्टी में आने वाले अवलोकनों के प्रतिशत के साथ एक बार चार्ट को एनोटेट करने का प्रयास कर रहा हूं। यह प्रश्न इस प्रश्न से बहुत करीबी से संबंधित है: Show % instead of counts in charts of categorical variables लेकिन फ़ेसटिंग का परिचय एक शिकन पेश करता है। संबंधित सवाल का जवाब stat_bin w/पाठ geom उपयोग करने के लिए है और फिर लेबल इतनी के रूप में निर्माण किया जा हैहालत एक .. गणना .. फ़ेसिंग चर पर सारांश

stat_bin(geom="text", aes(x = bins, 
     y = ..count.., 
     label = paste(round(100*(..count../sum(..count..)),1), "%", sep="") 
     ) 

यह एक संयुक्त राष्ट्र-आयामी साजिश के लिए ठीक काम करता है। हालांकि, पहलुओं के साथ, यह योग (.. गिनती ..) पहलुओं के संबंध में अवलोकनों के पूरे संग्रह पर संक्षेप में है। नीचे दी गई साजिश इस मुद्दे को दर्शाती है --- ध्यान दें कि प्रतिशत पैनल के भीतर 100% तक नहीं है।

enter image description here

यहाँ वास्तव में ऊपर चित्र के लिए कोड:

g.invite.distro <- ggplot(data = df.exp) + 
geom_bar(aes(x = invite_bins)) + 
facet_wrap(~cat1, ncol=3) + 
stat_bin(geom="text", aes(x = invite_bins, 
     y = ..count.., 
     label = paste(round(100*(..count../sum(..count..)),1), "%", sep="") 
     ), 
     vjust = -1, size = 3) + 
    theme_bw() + 
scale_y_continuous(limits = c(0, 3000)) 

अद्यतन:

df <- data.frame(x = c('a', 'a', 'b','b'), f = c('c', 'd','d','d')) 
ggplot(data = df) + geom_bar(aes(x = x)) + 
stat_bin(geom = "text", aes(
     x = x, 
     y = ..count.., label = ..count../sum(..count..)), vjust = -1) + 
facet_wrap(~f) 

enter image description here

: अनुरोध के अनुसार, यहां एक छोटा सा उदाहरण मुद्दा फिर से उत्पादन है
+1

दिलचस्प सवाल है, अगर आप हमें अपने त्रुटि पुन: पेश करने डेटा दिया आप अधिक एक प्रतिक्रिया प्राप्त होने की संभावना होगी। –

+0

क्षमा करें - ऐसा करना चाहिए था। अभी एक उदाहरण है। –

+0

मुझे इस समस्या का भी सामना करना पड़ा है, अगर ggplot इसे संभालेगा तो बहुत अच्छा होगा ... –

उत्तर

11

Upda तेgeom_barstat = identity की आवश्यकता है।

कभी-कभी ggplot को कॉल के बाहर सारांश प्राप्त करना आसान होता है।

df <- data.frame(x = c('a', 'a', 'b','b'), f = c('c', 'd','d','d')) 

# Load packages 
library(ggplot2) 
library(plyr) 

# Obtain summary. 'Freq' is the count, 'pct' is the percent within each 'f' 
m = ddply(data.frame(table(df)), .(f), mutate, pct = round(Freq/sum(Freq) * 100, 1)) 

# Plot the data using the summary data frame 
ggplot(data = m, aes(x = x, y = Freq)) + 
    geom_bar(stat = "identity", width = .7) + 
    geom_text(aes(label = paste(m$pct, "%", sep = "")), vjust = -1, size = 3) + 
    facet_wrap(~ f, ncol = 2) + theme_bw() + 
    scale_y_continuous(limits = c(0, 1.2*max(m$Freq))) 

enter image description here

संबंधित मुद्दे