2013-06-27 11 views
40

प्रकाशन के लिए एक और ग्राफ, एक और दिन ggplot2 में tweaking चीजें चला गया ... क्या मैं whinging? मुझे यकीन नहीं है ...ggplot अक्ष लेबल में सदस्यता पत्र

dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1])) 

dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1d])) 

मैं एक अक्ष लेबल में सबस्क्रिप्ट अक्षर कैसे प्राप्त करने के लिए काम करने की कोशिश कर रहा हूं। पहला उदाहरण काम करता है क्योंकि यह केवल एक संख्या है, जैसे ही आपके पास स्क्वायर ब्रैकेट में एक वर्ण है, यह विफल हो जाता है। ब्लाह [सबस्क्रिप्ट (1 डी)] अनिवार्य रूप से मुझे चाहिए, लेकिन मैं काम नहीं कर सकता कि इसे सबस्क्रिप्ट में अक्षरों के लिए कैसे प्राप्त किया जाए। पेस्ट() आदि

बेशक सहित कोशिश की विविधताओं, हताशा में जोड़ने के लिए है ...

labs(y=expression(Blah[12])) - इस

labs(y=expression(Blah[d])) काम करता है - इस

labs(y=expression(Blah[d1])) काम करता है - यह काम करता है

labs(y=expression(Blah[1d])) - यह विफल रहता है।

विचार?

उत्तर

41

मैं के बारे में सोच सकते हैं उपयोग करने से दो बेहतर तरीके paste:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1*d])) 
ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah["1d"])) 

टोकन (या "नाम" या "प्रतीक") आर में अंकों के साथ शुरू करने वाला नहीं है। इसलिए आप उस सीमा के चारों ओर उद्धरण या 1 और d को एक गैर-स्पेस विभाजक द्वारा * ऑपरेटर द्वारा अलग करके उस सीमा के आस-पास पहुंच जाते हैं। वह कानूनी आर प्रतीक या टोकन के साथ एक शुद्ध संख्यात्मक शाब्दिक "जुड़ता है" या "ligates"।

expression(Blah[1*d]*"(%)") 

% चरित्र यह शुरुआत का प्रतीक है, आर पार्स में विशेष अर्थ नहीं है के बाद से:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1*d]*"%")) 

पीसीटी हस्ताक्षर के आसपास कोष्ठक में कहें:

एक प्रतिशत चिह्न सिर्फ unsubscripted प्राप्त करने के लिए एक उपयोगकर्ता परिभाषित इंफिक्स ऑपरेटर। तो इसे एक शाब्दिक के रूप में उपयोग करने के लिए, इसे उद्धृत करने की आवश्यकता है।

+0

धन्यवाद डीडब्ल्यूएन को उद्धृत करने की आवश्यकता है, यह नहीं पता था कि इसे टोकन कहा जाता था। हालांकि यह प्रश्न में नहीं था (लेकिन मेरे जवाब में था), क्या आप पेस्ट के बिना सबस्क्रिप्ट के बाद (%) प्राप्त कर सकते हैं? – nzcoops

+1

बेशक मैं कर सकता हूं। सदस्यता ली गई है या नहीं? –

+0

सबस्क्रिप्ट में नहीं। – nzcoops

2

ठीक है। मैं पसीना मैं इस पोस्ट नहीं बस इसे अपने आप को जवाब देने के लिए, के बावजूद जल्दी कैसे मैं इसे (हमेशा रास्ता मिल गया है जब आपसे एक सवाल पूछ संदेश यह है:

ggplot(dat, aes(x=x,y=y)) + 
    geom_point() + 
    labs(y=expression(Blah[1][d])) 

उत्तर पोस्ट के बजाय करने के लिए यह सबसे अच्छा विचार सवाल यह किसी और एक दिन के रूप में मदद मिल सकती है हटा दें।

'blahs' एक तरफ, क्या मैं वास्तव में चाहता था expression(paste("Hb", A[1][c]," (%)",sep=""))

क्यों paste0() यहाँ काम नहीं करता मुझे परे है था।

+6

'paste0' प्लॉटमैथ फ़ंक्शन नहीं है। 'पेस्ट' एक प्लॉटमैथ फ़ंक्शन है सिवाय इसके कि इसमें' बेस :: पेस्ट 'फ़ंक्शन की तुलना में अलग-अलग अर्थशास्त्र हैं। विशेष रूप से इसमें कोई 'सीईपी' तर्क नहीं है। –

+0

और आर अभिव्यक्तियों में आपको किसी भी विशेष वर्ण जैसे '%' या आरक्षित शब्दों जैसे "इन" –

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