2012-06-19 11 views
7

के साथ geom_vline मेरे पास कुछ ggplot कोड है जो 0.8.9 में ठीक काम करता है लेकिन 0.9.1 में नहीं।चरित्र xintercept

मैं theDF में डेटा प्लॉट करने के लिए जा रहा हूँ और केवल theDF बनाने के लिए प्रयोग किया जाता है xintercept="2010 Q1."theGrid पर एक खड़ी रेखा प्लॉट करने के लिए करना चाहते हैं।

theGrid <- expand.grid(2009:2011, 1:4) 
theDF <- data.frame(YrQtr=sprintf("%s Q%s", theGrid$Var1, theGrid$Var2), 
        Minutes=c(1000, 2200, 1450, 1825, 1970, 1770, 1640, 1920, 1790, 1800, 1750, 1600)) 

इस्तेमाल किया कोड है:

g <- ggplot(theDF, aes(x=YrQtr, y=Minutes)) + 
     geom_point() + 
     opts(axis.text.x=theme_text(angle=90)) 

g + geom_vline(data=data.frame(Vert="2010 Q2"), aes(xintercept=Vert)) 

फिर, यह ggplot2 0.8.9 के साथ आर 2.13.2 में ठीक काम किया, लेकिन ggplot2 0.9.1 के साथ आर में 2.14+ नहीं करता है।

एक समाधान नहीं है:

g + geom_vline(data=data.frame(Vert=4), aes(xintercept=Vert)) 

लेकिन वह मेरी समस्या के लिए एक अच्छा समाधान नहीं है।

शायद scale_x_discrete के साथ गड़बड़ हो सकता है मदद कर सकता है?

+0

यह 'theVerts' के बिना पुन: उत्पन्न नहीं होता है (जो मुझे लगता है कि डेटा फ्रेम है?)। – joran

+0

@ जोरान के पास दुर्घटना से 'एएस' में 'data =' था। यह अब तय किया गया है ,वर्ट्स को 'data.frame (Vert = "2010 Q2") द्वारा प्रतिस्थापित किया गया है। – Jared

+0

यह एक बग की तरह दिखता है। क्या आप यहां कोई समस्या दर्ज कर सकते हैं: https://github.com/hadley/ggplot2/issues – wch

उत्तर

0

जब आप एक साजिश में एक्स-अक्ष के लिए एक चरित्र वेक्टर या कारक का उपयोग करते हैं, तो प्रत्येक अद्वितीय आइटम को दिए गए डिफ़ॉल्ट मान केवल 1 से शुरू होने वाले पूर्णांक होते हैं। इसलिए, यदि आपके स्तर सी हैं ("ए "" बी "," सी ") तो एक्स-अक्ष स्थान सी (1,2,3) हैं। चरित्र स्थान जैसी कोई चीज़ नहीं है, केवल एक वर्ण लेबल। यदि आप ए पर एक लंबवत रेखा चाहते हैं तो उसे 1 पर रखें। यदि आप इसे ए और बी के बीच आधा रास्ता चाहते हैं तो इसे 1.5 रखें। फिर, वे डिफ़ॉल्ट हैं। यदि किसी विशेष साजिश ने कुछ और किया है तो आप आसानी से कुछ स्थानों पर लाइनों को डालकर और क्या होता है यह देखकर आसानी से काम कर सकते हैं।

+0

हां, यही मामला है। लेकिन 'ggplot2' के पुराने संस्करण में यदि आपने इसे "ए" खिलाया है, तो यह 1 तक अनुवाद करेगा और लाइन को सही तरीके से रखेगा। यह व्यवहार वांछनीय है क्योंकि उपयोगकर्ता मूल पैमाने को जानता है, जरूरी नहीं कि यह किस प्रकार अनुवाद करता है। मैं प्रदर्शन करने के लिए प्रयुक्त 'ggplot2' व्यवहार को फिर से बनाने की उम्मीद कर रहा हूं। – Jared

12

आप इस कोशिश कर सकते:

g + geom_vline(aes(xintercept = which(levels(YrQtr) %in% '2010 Q1'))) 

यह चयनित कारक स्तर के लिए एक डमी डेटा फ्रेम बनाने की आवश्यकता से बचा जाता है। कौन सा() कमांड सूचकांक (या सूचकांक%% ऑपरेटर में% का दाहिने तरफ एक वेक्टर है) vlines के साथ संबद्ध करने के लिए कारक स्तर [ओं] का देता है।

इसके साथ एक चेतावनी यह है कि यदि कुछ श्रेणियां आपके डेटा में दिखाई नहीं देती हैं और आप पैमाने पर drop = TRUE का उपयोग करते हैं, तो लाइनें सही जगह पर दिखाई नहीं देगी।

+0

दिलचस्प दृष्टिकोण। मैं यह सुनिश्चित करने के लिए जांच करूंगा कि अन्य डेटा प्रकारों के लिए सामान्यीकृत है। – Jared

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