ggplot2 अप्रयुक्त स्तरों को बेरप्लॉट रखें


101

मैं अपने बार-प्लॉट में अप्रयुक्त स्तरों (अर्थात, वे स्तर जहाँ गिनती 0 है) को प्लॉट करना चाहता हूँ, हालाँकि, अप्रयुक्त स्तर को गिरा दिया जाता है और मैं यह पता नहीं लगा सकता कि उन्हें कैसे रखा जाए।

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()

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

किसी भी मदद के लिए धन्यवाद उलरिक

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

यह वही करता है जो मैं चाहता हूं

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")

अनुमान है कि तालिका () और फिर प्लॉट का उपयोग करके आवृत्तियों की गणना करना है

जवाबों:


68

आपको ड्रॉप = FALSE दोनों को इस तरह से भरना (भरना और x) सेट करना होगा:

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 बदलना भूल गए = 'चकमा'! बस पेस्ट और परीक्षण करें। स्टेट_बिन शून्य से गिनती के साथ डिब्बे से संबंधित है। डॉक्स की जांच करें ।


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

जब मैं ऐसा करता हूं तो यह मेरी सलाखों के रंग को बदल देता है। क्या मूल रंगों को रखने का एक तरीका है?
morgan121

71

क्या यह वही है जो आप चाहते हैं?

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

यहां छवि विवरण दर्ज करें


9

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

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")

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

यहां छवि विवरण दर्ज करें

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


1

आप उदाहरण के लिए "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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.