2012-02-28 17 views
14

मैं 40+ सलाखों की एक बड़ी ध्रुवीय ग्राफ/पाई चार्ट की साजिश रचने कर रहा हूँ के बहुभुज संकल्प/ggplot2 (geom_bar और coord_polar (थीटा = "y") का प्रयोग करके) के साथ के छल्ले, और मुझे पता चल रहा है कि वाई अक्ष प्लॉट संपीड़न आंतरिकतम अंगूठियों को बहुत खराब बहुभुज संकल्प का कारण बनता है।बढ़ाएँ ggplot ध्रुवीय भूखंडों

कोई भी पॉलीगोनल रिज़ॉल्यूशन को टक्कर देने का तरीका जानता है?

df <- data.frame(
    x = sort(sample(1:40, 400, replace=TRUE)), 
    y = sample(0:9, 400, replace=TRUE) 
) 


ggplot(df, aes(x=x, y=y, fill=y)) + 
    geom_bar(stat='identity', position="fill") + 
    coord_polar(theta="y") + 
    scale_fill_continuous(low="blue", high="pink") 

enter image description here

यह है कि मैं क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ ज्यामितीय संकल्प मतलब है। मैंने इसे केवल 5 स्तरों की साजिश करके प्रबंधित किया।

enter image description here

जब मैं 40 के स्तर को बढ़ाने के लिए केंद्रीय बहुभुज इस तरह उनकी चिकनाई खोने के लिए और भी दांतेदार हो जाते हैं,:

enter image description here

+1

यदि आप अपने कोड और कुछ उदाहरण डेटा में चिपके रहते हैं तो मैं आपको ऊपर उठाऊंगा। – James

+0

और यदि आप प्रतिलिपि कोड और नमूना डेटा पोस्ट नहीं करते हैं तो भी मैं डाउनवोट कर सकता हूं। एक महान प्रश्न पूछने के सुझावों के लिए http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example देखें। – Andrie

+0

चीयर्स! यह कोड समस्या को पुन: उत्पन्न करता है। यदि आप पीडीएफ में सहेजते हैं और केंद्र में ज़ूम करते हैं तो आप देखेंगे कि मेरा क्या मतलब है। 'df <- डेटा।फ्रेम (एक्स = सॉर्ट (नमूना (1:40, 400, प्रतिस्थापित = TRUE)), ' \t' y = नमूना (0: 9, 400, प्रतिस्थापित = TRUE)) 'ggplot (df, aes (x = एक्स, वाई y =, भरने = y)) + ' \t' geom_bar (स्टेट = 'पहचान', स्थिति = "भरने") + ' \t' coord_polar (थीटा = "y") + ' \t' scale_fill_continuous (कम = "नीला", उच्च = "गुलाबी") ' – geotheory

उत्तर

8

मुद्दा ggplot2:::coord_munch समारोह है, जो एक तर्क के साथ है 0.12:

https://github.com/hadley/ggplot2/blob/master/R/coord-munch.r

के डिफ़ॉल्ट मान के साथ

मुझे नहीं लगता कि तर्कों में उत्तीर्ण करने के लिए कोई जगह है जो इसे coord_munch के segment_length तर्क तक पहुंच जाएगी। इसके लिए निपटने का एक तरीका अब coord_munch को एक रैपर फ़ंक्शन के साथ प्रतिस्थापित करना है जिसमें segment_length के लिए एक अलग डिफ़ॉल्ट मान है।

# Save the original version of coord_munch 
coord_munch_old <- ggplot2:::coord_munch 

# Make a wrapper function that has a different default for segment_length 
coord_munch_new <- function(coord, data, range, segment_length = 1/500) { 
    coord_munch_old(coord, data, range, segment_length) 
} 
# Make the new function run in the same environment 
environment(coord_munch_new) <- environment(ggplot2:::coord_munch) 

# Replace ggplot2:::coord_munch with coord_munch_new 
assignInNamespace("coord_munch", coord_munch_new, ns="ggplot2") 

एक बार यह हो, आप फिर से उदाहरण चला सकते हैं:

set.seed(123) 
df <- data.frame(
    x = sort(sample(1:40, 400, replace=TRUE)), 
    y = sample(0:9, 400, replace=TRUE) 
) 

pdf('polar.pdf') 
ggplot(df, aes(x=x, y=y, fill=y)) + 
    geom_bar(stat='identity', position="fill") + 
    coord_polar(theta="y") + 
    scale_fill_continuous(low="blue", high="pink") 
dev.off() 

एक नाम स्थान में मान आवंटित केवल विकास प्रयोजनों के लिए इस्तेमाल किया जा माना जाता है, तो यह एक अच्छा दीर्घकालिक समाधान नहीं है ।

+1

मेरा मानना ​​है कि यह केवल संस्करण 0.9.0 या उच्चतम के साथ काम करता है; संस्करण 0.8.9 में 'coord_munch' –

+0

नहीं है अन्य कार्यवाही के लिए ऊपर मेरी टिप्पणी देखें। – geotheory

0

ऊपर WCH के सही निदान और समाधान का के अलावा, एक विकल्प के वैकल्पिक हल ggplot2 Google समूह के माध्यम से जीन ओलिवियर ने सुझाव दिया जाता है:

इसके बजाय, डेटा अंतरिक्ष में समन्वय मूल्यों को बढ़ाने के लिए डेटा को बदलने , कुछ इस तरह कर रही द्वारा:

ggplot(df, aes(x=x+100, y=y, fill=y)) + 
geom_bar(stat='identity', position="fill") + 
coord_polar(theta="y") + 
scale_fill_continuous(low="blue", high="pink") 

सभी को धन्यवाद।