मुझे वास्तव में वायलिन भूखंडों की तरह शुरू करना शुरू हुआ, क्योंकि जब वे मजाकिया वितरण करते हैं तो मुझे बॉक्स प्लॉट्स का बेहतर अनुभव मिलता है। मुझे बहुत सी चीजों को स्वचालित करना पसंद है, और इस प्रकार एक समस्या में भाग गया: जब एक चर के पास 0 भिन्नता होती है, तो बॉक्सप्लॉट आपको उस बिंदु पर बस एक रेखा देता है। हालांकि Geom_violin, एक त्रुटि के साथ समाप्त होता है। मुझे क्या व्यवहार पसंद आएगा? खैर, या तो एक रेखा या कुछ भी नहीं डालें, लेकिन कृपया मुझे अन्य चर के लिए वितरण दें।ggplot2 geom_violin 0 भिन्नता
ठीक है, त्वरित उदाहरण:
dff=data.frame(x=factor(rep(1:2,each=100)),y=c(rnorm(100),rep(0,100)))
ggplot(dff,aes(x=x,y=y)) + geom_violin()
Error in `$<-.data.frame`(`*tmp*`, "n", value = 100L) :
replacement has 1 row, data has 0
हालांकि पैदावार, क्या काम करता है:
ggplot(dff,aes(x=x,y=y)) + geom_boxplot()
अद्यतन:
मुद्दा कल के रूप में हल हो गई है: https://github.com/hadley/ggplot2/issues/972
अद्यतन 2: (प्रश्न लेखक की ओर से) वाह, हैडली खुद जवाब दिया! geom_violin
अब geom_density
और आधार R density
के साथ लगातार व्यवहार करता है।
हालांकि, मुझे नहीं लगता कि व्यवहार अभी तक इष्टतम है।
(1) 'शून्य' समस्या
बस मेरे मूल उदाहरण के साथ इसे चलाने:
dff=data.frame(x=factor(rep(1:2, each=100)), y=c(rnorm(100), rep(0,100)))
ggplot(dff,aes(x=x,y=y)) + geom_violin(trim=FALSE)
सही एक उपयुक्त पर साजिश है 'सभी शून्य' का प्रतिनिधित्व? मुझे ऐसा नहीं लगता। यह ट्रिम करना बेहतर है जो एक पंक्ति को उत्पन्न करता है यह दिखाने के लिए कि डेटा में कोई बदलाव नहीं है। वर्कअराउंड समाधान: जोड़ें + geom_boxplot()
(2) मैं वास्तव में TRIM=TRUE
कर सकते हैं।
उदाहरण:
dff=data.frame(x=factor(rep(1:2, each=100)), y=c(rgamma(100,1,1), rep(0,100) ))
ggplot(dff,aes(x=x,y=y)) + geom_violin(trim=FALSE)
अब मैं गैर शून्य डेटा, और मानक कर्नेल घनत्व अनुमान इस सही ढंग से संभाल नहीं है। trim=T
के साथ मैं जल्दी से देख सकता हूं कि डेटा कड़ाई से सकारात्मक है।
मैं बहस नहीं कर रहा हूं कि वर्तमान व्यवहार 'गलत' है, क्योंकि यह अन्य कार्यों के अनुरूप है। हालांकि, geom_violin
विभिन्न संदर्भों में अलग-अलग डेटा की खोज के लिए विभिन्न संदर्भों में उपयोग किया जा सकता है। उदाहरण के लिए विषम डेटा प्रकारों (सकारात्मक + skewed या नहीं) के साथ फ्रेम।
ggplot2
मुद्दा जब तक इस से निपटने के लिए
गीथब पर किसी मुद्दे के रूप में सबमिट करने के लिए उचित चीज़ की तरह लगता है, विशेष रूप से इस मामले को संभालने के बाद शायद यह बहुत आसान है (हालांकि प्रदर्शित करने के बारे में मजबूत भावनाएं हो सकती हैं)। – joran
एक त्वरित हैक के रूप में, आप वाई-मानों में से एक को 0.0001 (शून्य के बजाय) पर सेट कर सकते हैं और 'geom_violin' काम करेगा। यदि आप 'ggplot2' का उपयोग करने पर सेट नहीं हैं तो आप 'vioplot' पैकेज भी देख सकते हैं। जब आप इसे समान मानों का गुच्छा खिलाते हैं तो 'vioplot' त्रुटि नहीं फेंकता है। – eipi10
बस एक और संभावित विकल्प के रूप में, 'Hmisc' पैकेज में' panel.bbplot' (बॉक्स-प्रतिशत प्लॉट) फ़ंक्शन शामिल है जो 'जाली' से 'bwplot' फ़ंक्शन के साथ वायलिन प्लॉट बना सकता है। '? Panel.bpplot' के उदाहरण अनुभाग देखें। यह एक एकल रेखा उत्पन्न करता है जब आप इसे समान मूल्यों का वेक्टर खिलाते हैं। – eipi10