2012-12-04 14 views
19

हम आर में टुफेट की अंतर्निहित क्षैतिज रेखाओं को कैसे दोहरा सकते हैं?आर ग्राफ: टुफेट की क्षैतिज पट्टी रेखाएं बनाना

library(ggplot2)  
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() 

सीमा रेखा निकाला जा रहा है सरल होना चाहिए:

Tufte bars

उदाहरण के लिए, निम्नलिखित एक अच्छा प्रारंभिक बिंदु है। महत्वपूर्ण बिंदु, सलाखों के साथ क्षैतिज रेखा को ओवरले करना, मेरे लिए अस्पष्ट है।

मैं यहाँ दो दृष्टिकोण की कल्पना: इस विशिष्ट उदाहरण के लिए

  1. तदर्थ समाधान
  2. सुझाव है कि कैसे एक विषय
+0

मुझे लगता है कि इस सवाल का ज्यादा बेहतर phrased है, इसलिए मैं n के लिए मतदान ओटी बंद करना – Andrie

+0

मुझे लगता है कि मुख्य समस्या यह है कि शीर्षक प्रस्तावित डुप्लिकेट जैसा ही है। मेरा सुझाव है कि एक अंतर i.e. (सटीक मामला) शीर्षक में प्रतिनिधित्व करने योग्य रूप में आसवित किया जा सकता है। यदि वे काफी अलग हैं, तो प्रत्येक के शीर्षक को विशिष्टता को प्रतिबिंबित करना चाहिए। – krock

+0

@Andrie, हाँ मैं आपसे सहमत हूं लेकिन मुझे लगता है कि एक मॉड ने इसे फिर से खोल दिया है, इसलिए यह एक महत्वपूर्ण मुद्दा है। मेरा लक्ष्य दो पदों को जोड़ने के लिए इतना था इसलिए मैं वहां जाऊंगा और यहां वापस लिंक करूंगा। क्रॉच सही है कि शीर्षक मुद्दा है। अंत में "ggplot2 में" का एक जोड़ा दो और भी अलग करेगा। –

उत्तर

11

नहीं एक बड़ा इसके अलावा, लेकिन आप ggplot2 साथ टफ़्टे-sque भूखंडों बनाने के लिए पैकेज ggthemes का एक लाभ ले सकते हैं। नीचे, मैं theme_tufte उपयोग कर रहा हूँ, extrafont पैकेज का उपयोग फ़ॉन्ट बदलने, और opts का उपयोग को फ़ाइन-ट्यून करने के लिए सभी अन्य दृश्य विशेषताएं:

library(ggthemes) 
library(extrafont) 
ggplot(msleep, aes(x=order)) + stat_bin(width=0.6, fill="gray") + 
    theme_tufte(base_family="GillSans", base_size=16, ticks=F) + 
    theme(axis.line=element_blank(), axis.text.x=element_blank(), 
     axis.title=element_blank()) + 
    geom_hline(yintercept=seq(5, 20, 5), col="white", lwd=1.2) 

enter image description here

18

सिद्धांत रूप में में शामिल करने के लिए, इस सरल है - आप सभी की एक नई परत में सफेद क्षैतिज रेखा खींचने की जरूरत है। ऐसा करने के लिए geom_hline उपयोग कर सकते हैं:

library(ggplot2)  
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() + 
    geom_hline(yintercept=seq(5, 20, 5), col="white") 

enter image description here

अपने दूसरे प्रश्न का सवाल है - मुझे लगता है, यह एक विषय में शामिल करने के लिए मुश्किल हो सकता है चाहते हैं, हालांकि यह एक कस्टम geom बनाने के लिए संभव हो जाना चाहिए जो वाई-स्केल ब्रेक पढ़ता है और रेखाओं को संगत रूप से साजिश देता है।

जवाब @Andrie करने के लिए (मैं गलत साबित करने में खुशी होगी।)

+0

अच्छा, मुझे लगता है कि seq मानों को निकालने में स्वचालित रूप से मुश्किल है ? – Rico

+0

@ रिको: यह आसान होना चाहिए। 'horiz_lines' <- seq (y_min, y_max, = 5 द्वारा) ', जहां मैं अधिकतम और न्यूनतम मानों की" पूर्व-गणना "करता हूं। फिर 'yintercept = c (horiz_lines) 'और आप कर चुके हैं। –

3

वहाँ भी इस के लिए एक बहुत आसान आधार आर समाधान है :

tmp <- table(msleep$order) 
barplot(tmp, col='black', las=3) 
abline(h=seq(5, max(tmp), by=5), col='white', lwd=2) 

enter image description here

+0

सुरुचिपूर्ण समाधान! – Rico

+0

'सेगमेंट (0, 1: 4 * 5, 100, 1: 4 * 5, col = 'white') के साथ' lapply (... abline (...)) 'यह घटना अधिक सुंदर है। – Backlin

+0

@ बैकलिन सुझाव के लिए धन्यवाद, क्योंकि यह मुझे याद दिलाता है कि 'abline' भी vectorized है। – Thomas

संबंधित मुद्दे