2012-06-08 11 views
27

प्लॉट में एनोटेशन टेक्स्ट जोड़ने के दौरान मैंने देखा कि geom_text() ने अजीब, जंजीर पाठ का उत्पादन किया, जबकि annotate() ने चिकनी, अच्छी दिखने वाली टेक्स्ट बनाई। क्या कोई जानता है कि ऐसा क्यों होता है और यदि इसे ठीक करने का कोई तरीका है? मुझे पता है कि मैं सिर्फ annotate() का उपयोग कर सकता हूं, लेकिन शायद ऐसे मामले हैं जहां geom_text() बेहतर है, और मैं एक फिक्स ढूंढना चाहता हूं। इसके अलावा, geom_text() खराब दिखने वाले पाठ देने के लिए इरादा नहीं हो सकता है, इसलिए या तो मैं कुछ गलत कर रहा हूं, या मैंने कुछ प्रकार के सूक्ष्म दुष्प्रभाव में भाग लिया है।ggplot2: क्या geom_text() द्वारा उत्पादित जंजीर, खराब गुणवत्ता वाले पाठ के लिए कोई फिक्स है?

ग्राफ के उत्पादन के लिए कुछ नकली डेटा और कोड, साथ ही परिणाम दिखाते हुए एक छवि है।

library(ggplot2) 
age = structure(list(age = c(41L, 40L, 43L, 44L, 40L, 42L, 44L, 45L, 
     44L, 41L, 43L, 40L, 43L, 43L, 40L, 42L, 43L, 44L, 43L, 41L)), 
     .Names = "age", row.names = c(NA, -20L), class = "data.frame") 
ggplot(age, aes(age)) + 
    geom_histogram() + 
    scale_x_continuous(breaks=seq(40,45,1)) + 
    stat_bin(binwidth=1, color="black", fill="blue") + 
    geom_text(aes(41, 5.2, 
      label=paste("Average = ", round(mean(age),1))), size=12) + 
    annotate("text", x=41, y=4.5, 
      label=paste("Average = ", round(mean(age$age),1)), size=12) 

enter image description here

+0

का उपयोग संरचना ठीक है, लेकिन भूल जाते हैं आवंटित करने के लिए नहीं है: '' '' उम्र = structure' '' '। मैंने आपका उदाहरण संपादित किया है। –

+0

मेरा फिक्स यह है कि मैं 'ggplot' में सभी महत्वपूर्ण तत्व उत्पन्न करता हूं, फिर' ggsave (file = "plot.eps") 'और इसे एडोब इलस्ट्रेटर या प्रकाशन गुणवत्ता आंकड़ों के लिए कुछ अन्य वेक्टर ग्राफिक्स प्रोग्राम के साथ संपादित करता हूं। – Maiasaura

उत्तर

51

geom_text, कुछ भी सीधे का उपयोग नहीं कर age data.frame से बावजूद, अभी भी अपने डेटा स्रोत के लिए उपयोग किया जाता है। इसलिए, यह साजिश पर "औसत = 42.3" की 20 प्रतियां डाल रहा है, प्रत्येक पंक्ति के लिए एक। यह है कि एकाधिक ओवरराइटिंग जो इसे बहुत खराब लगती है। geom_text को एक साजिश पर टेक्स्ट डालने के लिए डिज़ाइन किया गया है जहां जानकारी डेटा.फ्रेम से प्राप्त होती है (जिसे इसे सीधे या अप्रत्यक्ष रूप से मूल ggplot कॉल में दिया जाता है)। annotate आपके जैसे सरल एक-ऑफ परिवर्धन के लिए डिज़ाइन किया गया है (यह डेटा स्रोत की देखभाल करते हुए geom_text बनाता है)।

तुम सच में geom_text() का उपयोग करना चाहते हैं, तो बस डेटा स्रोत रीसेट:

ggplot(age, aes(age)) + 
    scale_x_continuous(breaks=seq(40,45,1)) + 
    stat_bin(binwidth=1, color="black", fill="blue") + 
    geom_text(aes(41, 5.2, 
      label=paste("Average = ", round(mean(age$age),1))), size=12, 
      data = data.frame()) + 
    annotate("text", x=41, y=4.5, 
      label=paste("Average = ", round(mean(age$age),1)), size=12) 

enter image description here

+0

यह समझने के लिए अच्छा है कि 'geom_text()' कैसे काम करता है। आपकी मदद ब्रायन के लिए धन्यवाद। – eipi10

+0

+1 ब्रायन, एक अच्छी तरह लिखित और सचित्र उत्तर और उपयोगी टिप पुनः 'एनोटेट() 'का एक उदाहरण है। डेटा रीसेट करने के बाद से –

+0

'geom_text' के लिए' माध्य (आयु $ आयु) 'नहीं होना चाहिए? – colinfang

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