2012-05-31 14 views
45

मैं अप्रयुक्त स्तरों (जो है, स्तरों जहां गिनती है 0) मेरी barplot में, हालांकि, अप्रयुक्त स्तरों को छोड़ दिया जाता है और मैं समझ नहीं कर सकते हैं उन्हेंggplot2 अप्रयुक्त स्तरों barplot

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5)) 
df$type <- factor(df$type, levels=c("A","B", "C")) 

ggplot(df, aes(x=group, fill=type)) + geom_bar() 
रखने के लिए कैसे साजिश करना चाहते रखना

उपरोक्त उदाहरण में, मैं देखना चाहता सी 0 की गणना के साथ साजिश रची चाहते हैं, लेकिन यह पूरी तरह से अनुपस्थित है ...

किसी भी मदद Ulrik

संपादित करने के लिए धन्यवाद:

यह जो मैं चाहता

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5)) 
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5))) 

df$type <- factor(df$type, levels=c("A","B", "C")) 
df1$type <- factor(df1$type, levels=c("A","B", "C")) 
df <- data.frame(table(df)) 

df1 <- data.frame(table(df1)) 

ggplot(df, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge") 
ggplot(df1, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge") 

लगता समाधान तालिका() का उपयोग कर आवृत्तियों की गणना करने के लिए और फिर साजिश

उत्तर

6

आप ड्रॉप = दोनों पैमानों पर गलत निर्धारित करने की आवश्यकता (भरने और एक्स) इस तरह:

library(ggplot2) 
df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5)) 
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5))) 
df$type <- factor(df$type, levels=c("A","B", "C")) 
df1$type <- factor(df1$type, levels=c("A","B", "C")) 

plt <- ggplot(df, aes(x=type, fill=type)) + geom_bar(position='dodge') + scale_fill_discrete(drop=FALSE) + scale_x_discrete(drop=FALSE) 
plt1 <- ggplot(df1, aes(x=type, fill=type)) + geom_bar(position='dodge') + scale_fill_discrete(drop=FALSE) + scale_x_discrete(drop=FALSE) 

संपादित करें:

मैं बहुत यकीन है कि यह काम करता है हूँ । समूह के बजाय x को टाइप करने के लिए भूल गए और स्थिति = 'डॉज'! बस पेस्ट करें और परीक्षण करें। Stat_bin शून्य गणना वाले डिब्बे से संबंधित है। docs देखें।

+0

मुझे लगता है कि यह होना चाहिए ओपी के सवाल का जवाब। जवाब पौराणिक कथाओं में भी गिराए गए स्तर का ख्याल रखता है। – SavedByJESUS

51

आप यही चाहते करना है है करता है?

ggplot(df, aes(x=type)) + geom_bar() + scale_x_discrete(drop=FALSE) 

enter image description here

7

गिरने के स्तर काम नहीं करते हैं। इस साजिश में पहला उदाहरण पर स्तरों गिराने

library(ggplot2) 

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5)) 
df$type <- factor(df$type, levels=c("A","B", "C")) 

ggplot(df, aes(x=group, fill=type)) + geom_bar(position="dodge") + scale_x_discrete(drop=FALSE) + scale_fill_discrete(drop=FALSE) 

परिणाम:

df <- data.frame(type=c("A", "A", "A", "B", "B"), group=rep("group1", 5)) 
df1 <- data.frame(type=c("A", "A", "A", "B", "B", "A", "A", "C", "B", "B"), group=c(rep("group1", 5),rep("group2", 5))) 

df$type <- factor(df$type, levels=c("A","B", "C")) 
df1$type <- factor(df1$type, levels=c("A","B", "C")) 

df <- data.frame(table(df)) 
df1 <- data.frame(table(df1)) 

df$plot = "A" 
df1$plot = "B" 

df <- rbind(df, df1) 

ggplot(df, aes(x=group, y=Freq, fill=type)) + geom_bar(position="dodge", stat="identity") + facet_wrap(~ plot, scales="free") 

परिणाम इस में:

enter image description here

समाधान जहां आवृत्तियों मैन्युअल गणना कर रहे हैं कि दूसरे उदाहरण में है :

enter image description here

पिछले एक सबसे जानकारीपूर्ण है के रूप में अंतरिक्ष श्रेणियों के द्वारा लिया जाता है वहाँ गिनती = 0

0

तुम भी उदाहरण के लिए "scale_fill_color" उपयोग कर सकते हैं:

plt <- ggplot(df, aes(x=type, fill=type)) + geom_bar(position='dodge') + scale_x_discrete(drop=FALSE)+ 
scale_fill_manual(
    values = c(
    "#ff6666", 
    "#cc9900", 
    "#cc9900", 
    ),drop=FALSE)