दिलचस्प पोस्ट
जीएमटी टाइमज़ोन से आईएसटी टाइमज़ोन और एंड्रॉइड में उल्टा करने के लिए दिनांक का विश्लेषण कैसे करें एकाधिक अक्षों द्वारा 2 डी संख्यात्मक सरणी को क्रमबद्ध करना इकाई फ़्रेमवर्क माइग्रेशन के साथ डेटटाइम फ़ील्ड को डिफाल्ट करने के लिए संभव? अपरिवर्तनीय (डबल) लिंक्डलिस्ट के कुशल कार्यान्वयन स्मृति से बाहर Image.FromFile `Constexpr` और` const` के बीच का अंतर एसक्यूएल एक आंतरिक जोड़ने से अद्यतन मैं यह कैसे निर्धारित करूं कि क्या कोई दी गई तारीख महीने के एनथेंदिवस है? ./configure: / bin / sh ^ M: खराब इंटरप्रिटर 'लॉग' और 'सिमोल' के बीच अंतर क्या है? 'पूंछ' कमांड के बराबर विंडोज पहले से खोले गए पॉपअप का यूआरएल बदलें क्यों neo4j चेतावनी देता है: "यह क्वेरी डिस्कनेक्ट किए गए पैटर्न के बीच एक कार्टेसीयन उत्पाद बनाता है"? Node.js: एक अनुगामी नईलाइन के बिना कंसोल पर मुद्रण? मैं जावा में स्विंगवॉकर का उपयोग कैसे करूं?

जीजीप्लोट 2 में सरल जनसंख्या पिरामिड

मैं ggplot2 के साथ जनसंख्या पिरामिड बनाना चाहता हूं इस सवाल से पहले पूछा गया था, लेकिन मेरा मानना ​​है कि समाधान बहुत सरल होना चाहिए।

test <- (data.frame(v=rnorm(1000), g=c('M','F'))) require(ggplot2) ggplot(data=test, aes(x=v)) + geom_histogram() + coord_flip() + facet_grid(. ~ g) 

इस छवि का उत्पादन मेरी राय में, आबादी पिरामिड बनाने के लिए यहां एकमात्र कदम लापता है, पहला पहलू के एक्स अक्ष को पलटने के लिए, ताकि दूसरे अछूता को रखते हुए यह 50 से 0 तक हो। क्या कोई मदद कर सकता है?

जनसंख्या पिरामिड

Solutions Collecting From Web of "जीजीप्लोट 2 में सरल जनसंख्या पिरामिड"

यहाँ faceting बिना एक समाधान है सबसे पहले, डेटा फ्रेम बनाएं मैंने 1 से 20 के मानों का इस्तेमाल किया ताकि यह सुनिश्चित हो सके कि मूल्यों में से कोई भी ऋणात्मक नहीं है (जनसंख्या पिरामिड के साथ आपको ऋणात्मक गणना नहीं मिलती है)

 test <- data.frame(v=sample(1:20,1000,replace=T), g=c('M','F')) 

फिर, प्रत्येक g मूल्यों के लिए अलग से दो geom_bar() कॉल करें। F गणना के लिए गणना की जाती है क्योंकि वे हैं, लेकिन M गणना के लिए 1 से गुणा किया जाता है ताकि विपरीत दिशा में बार हो। तब scale_y_continuous() अक्ष के लिए सुंदर मूल्य प्राप्त करने के लिए उपयोग किया जाता है

 require(ggplot2) require(plyr) ggplot(data=test,aes(x=as.factor(v),fill=g)) + geom_bar(subset=.(g=="F")) + geom_bar(subset=.(g=="M"),aes(y=..count..*(-1))) + scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) + coord_flip() 

अद्यतन करें

तर्क subset=. रूप में नवीनतम ggplot2 संस्करणों में पदावनत किया गया है, उसी परिणाम को फ़ंक्शन subset() साथ प्राप्त किया जा सकता है।

 ggplot(data=test,aes(x=as.factor(v),fill=g)) + geom_bar(data=subset(test,g=="F")) + geom_bar(data=subset(test,g=="M"),aes(y=..count..*(-1))) + scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) + coord_flip() 

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

Didzis एलफर्ट्स प्रयास की तुलना में थोड़ा अधिक सामान्य संस्करण

  1. क्षैतिज अक्ष पर लेबल के ब्रेक के साथ कुछ नाराज़गी से बचता है
  2. subset या अतिरिक्त पैकेजों की आवश्यकता से बचता है (पीलीर)
  3. केवल एक बार geom_bar() उपयोग करता है
  4. समान पुरुष और महिला क्षैतिज अक्ष हैं ( limits = max(df0$Population) * c(-1,1) … हटाएं अगर आवश्यक नहीं है)

डेटा बनाना …

 set.seed(1) df0 <- data.frame(Age = factor(rep(x = 1:10, times = 2)), Gender = rep(x = c("Female", "Male"), each = 10), Population = sample(x = 1:100, size = 20)) head(df0) # Age Gender Population # 1 1 Female 27 # 2 2 Female 37 # 3 3 Female 57 # 4 4 Female 89 # 5 5 Female 20 # 6 6 Female 86 

प्लॉट कोड …

 library("ggplot2") ggplot(data = df0, mapping = aes(x = Age, fill = Gender, y = ifelse(test = Gender == "Male", yes = -Population, no = Population))) + geom_bar(stat = "identity") + scale_y_continuous(labels = abs, limits = max(df0$Population) * c(-1,1)) + labs(y = "Population") + coord_flip() 

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

ध्यान दें, अगर आपका डेटा आयु वर्ग के समूह द्वारा संक्षेप के बजाय व्यक्तिगत स्तर पर है, तो इसका उत्तर यहां बहुत सामान्य है।