ggplot

2013-11-21 24 views
8

में धुरी लेबल और टिक में लाइन ब्रेक जोड़ें I प्लॉट के एक्स अक्ष पर लंबे चर नामों का उपयोग करने का एक तरीका ढूंढ रहा हूं। बेशक मैं एक छोटे फ़ॉन्ट का उपयोग कर सकता हूं या उन्हें थोड़ा घुमा सकता हूं लेकिन मैं उन्हें लंबवत और पठनीय रखना चाहता हूं।ggplot

एक उदाहरण के रूप:

df <- data.frame(a=LETTERS[1:20], b=rnorm(20), c=rnorm(20), d=rnorm(20)) 
df_M <- melt(df, id="a") 
plot <- ggplot(data=df_M, aes(x=variable, y=a, fill=value) + geom_tile() + scale_fill_gradient(low="green", high="red") 
plot 
यहाँ

एक्स अक्ष सिर्फ पत्र है, लेकिन अगर मैं पूरा नाम का उपयोग करना चाहते हैं, नाम अंतरिक्ष की आय से अधिक राशि का उपयोग करें:

plot + theme(axis.text.x=element_text(angle=90))+ scale_x_discrete(breaks=unique(df_M$variable), labels=c("Ambystoma mexicanum", "Daubentonia madagascariensis", "Psychrolutes marcidus")) 

तो मैं लेबल में लाइन ब्रेक रखना चाहता हूं। अधिमानतः ggplot2 में लेकिन अन्य समाधान पाठ्यक्रम का स्वागत है।

धन्यवाद!

उत्तर

17

आप अपना खुद का फॉर्मेटर जोड़ सकते हैं (अधिक उदाहरणों के लिए scales पैकेज देखें)। यहां मैं आपके एक्स लेबल में किसी भी स्थान को एक नई लाइन से प्रतिस्थापित करता हूं।

addline_format <- function(x,...){ 
    gsub('\\s','\n',x) 
} 

myplot + 
    scale_x_discrete(breaks=unique(df_M$variable), 
    labels=addline_format(c("Ambystoma mexicanum", 
         "Daubentonia madagascariensis", "Psychrolutes marcidus"))) 

enter image description here

+0

ग्रेट, इसके लिए धन्यवाद। उस बारे में कभी सोचा नहीं था, बिल्कुल मुझे क्या चाहिए! – debruinf

+3

सुनिश्चित नहीं है कि 'addline_format' फ़ंक्शन की आवश्यकता क्यों है। क्या कोई सिर्फ लेबल में सीधे लाइन-ब्रेक निर्दिष्ट नहीं कर सकता है? उदाहरण के लिए, 'सी ("एम्बिस्टोमा \ nmexicanum", ... ' – Fuhrmanator

4
str_replace_all (के माध्यम से

), 'अंतरिक्ष परिसीमक पर, विभाजन' एक अंतरिक्ष परिसीमक 'के साथ' foo_your_symbol_delim ''

str_wrap के माध्यम से

, पर prespecified चौड़ाई के साथ '40' की जगह ले, चादर टुकड़े, और पेस्ट

+ scale_x_discrete(labels = function(x) str_wrap(str_replace_all(x, "foo" , " "),width = 40)) 
+1

आप दो साल के प्रश्नों का उत्तर क्यों दे रहे हैं और पहले से ही उत्तर दिया है? – Heroka

+4

क्योंकि मैं एक समान समाधान की तलाश में था और इसे और अधिक सामान्य और कुशल बनाया। – MKJCKTZN

+1

कुछ भी नहीं पुराने प्रश्नों के उत्तर पर सुधार करने की कोशिश करने में गलत! यह कहा गया है कि यदि आप कम terse लेखन शैली का उपयोग करते हैं तो आपका उत्तर आगे बढ़ेगा। –

2

आप नहीं चाहते कि हर लेबल नाम की रिक्ति के प्रत्येक उदाहरण में तोड़ने के लिए है, तो आप वैकल्पिक रूप सेइस्तेमाल कर सकते हैं(नई लाइन) कॉल के भीतर scale_x_continuous रहे हैं:

my.labels <- c("Ambystoma\nmexicanum","Daubentonia madagascariensis", 
       "Psychrolutes marcidus") # first create labels, add \n where appropriate. 

myplot + 
    scale_x_discrete(labels= my.labels) 

ध्यान दें कि केवल प्रथम नाम (Ambystoma mexicanum) नई लाइन आदेश (\n) का उपयोग कर टूट जाएगा।