Ggplot में पहलुओं के क्रम को ठीक करना


96

डेटा:

df <- data.frame(
    type   = c("T", "F", "P", "T", "F", "P", "T", "F", "P", "T", "F", "P"), 
    size   = c("50%", "50%", "50%", "100%", "100%", "100%", "150%", "150%", "150%", "200%", "200%", "200%"),
    amount = c(48.4, 48.1, 46.8, 25.9, 26, 24.9, 21.1, 21.4, 20.1, 20.8, 21.5, 16.5)
)

मुझे ऊपर ggplot (x- अक्ष -> type, y- अक्ष -> amount, समूह size) का उपयोग करके उपरोक्त डेटा के एक बारग्राफ को प्लॉट करने की आवश्यकता है । जब मैंने निम्नलिखित कोड का उपयोग किया, तो मुझे चर typeऔर साथ ही sizeडेटा में दिखाए गए क्रम में नहीं मिल रहा है । कृपया आंकड़ा देखें। मैंने उसके लिए निम्न कोड का उपयोग किया है।

 ggplot(df, aes(type, amount , fill=type, group=type, shape=type, facets=size)) + 
  geom_bar(width=0.5, position = position_dodge(width=0.6)) + 
  facet_grid(.~size) + 
  theme_bw() + 
  scale_fill_manual(values = c("darkblue","steelblue1","steelblue4"), 
                    labels = c("T", "F", "P"))

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

आदेश समस्या को ठीक करने के लिए, मैंने निम्न का उपयोग करके चर "प्रकार" के लिए एक कारक विधि का उपयोग किया है। कृपया आंकड़ा भी देखें।

temp$new = factor(temp$type, levels=c("T","F","P"), labels=c("T","F","P")) 

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

हालाँकि, अब मुझे नहीं पता कि चर के लिए ऑर्डर कैसे तय किया जाए size। यह 50%, 100% होना चाहिए। 150%, और 200%।

जवाबों:


147

अपने आकार को अपने डेटाफ्रेम में एक कारक बनाएं:

temp$size_f = factor(temp$size, levels=c('50%','100%','150%','200%'))

फिर बदलने facet_grid(.~size)के लिएfacet_grid(.~size_f)

फिर साजिश: यहाँ छवि विवरण दर्ज करें

ग्राफ अब सही क्रम में हैं।


7

यहां एक समाधान है जो एक dplyr पाइप श्रृंखला के भीतर चीजों को रखता है। आप पहले से डेटा सॉर्ट करते हैं, और फिर एक कारक में बदलने के लिए mutate_at का उपयोग करते हैं। मैंने डेटा को यह दिखाने के लिए थोड़ा संशोधित किया है कि यह समाधान आम तौर पर कैसे लागू किया जा सकता है, यह देखते हुए कि समझदारी से हल किया जा सकता है:

# the data
temp <- data.frame(type=rep(c("T", "F", "P"), 4),
                    size=rep(c("50%", "100%", "200%", "150%"), each=3), # cannot sort this
                    size_num = rep(c(.5, 1, 2, 1.5), each=3), # can sort this
                    amount=c(48.4, 48.1, 46.8, 
                             25.9, 26.0, 24.9,
                             20.8, 21.5, 16.5,
                             21.1, 21.4, 20.1))

temp %>% 
  arrange(size_num) %>% # sort
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>% # convert to factor

  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)

आप इस समाधान को पहलुओं के भीतर सलाखों को व्यवस्थित करने के लिए भी लागू कर सकते हैं, हालांकि, आप केवल एक एकल, पसंदीदा ऑर्डर चुन सकते हैं:

    temp %>% 
  arrange(size_num) %>%
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>%
  arrange(desc(amount)) %>%
  mutate_at(vars(type), funs(factor(., levels=unique(.)))) %>%
  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)


  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.