2012-11-04 24 views
36

साथ मैं एक expression() बयान के साथ दो लाइनों पर एक धुरी लेबल लिखने के लिए करना चाहते हैं। हालांकि, plotmath और expression इस (जैसे subscripted पाठ पर अब तक सही दिखाई देता है) अनुमति नहीं दी जाएगी। मैं एक ऐसी ही जारी होने की this discussion लगभग 2005 लेकिन काम के आसपास पाया है कि वे प्रदान करते हैं ggplot2 में अपने आवेदन करने के लिए अनुवाद नहीं करता है। A recent question बहु लाइन अभिव्यक्ति बयान का एक अलग क्रमचय को संबोधित किया, लेकिन फिर से काम के आसपास उपलब्ध यहाँ लागू नहीं होता।ggplot2 दो लाइन लेबल अभिव्यक्ति

उदाहरण:

p <- ggplot(mtcars,aes(x=wt,y=mpg))+ 
    geom_point()+ 
    xlab(expression(paste("A long string of text goes here just for the purpose \n of illustrating my point Weight "[reported]))) 
try(ggsave(plot=p,filename=<some file>,height=4,width=6)) 

एक छवि जहां अधोलिखित "रिपोर्ट" बाहर सही करने के लिए निकाल दिया जाता है, जब मैं यह करना चाहते हैं पिछले शब्द के बगल में बैठने के लिए अर्जित करता है। ggplot2 two line label with expression

+0

क्यों आप एक अभिव्यक्ति यहाँ की आवश्यकता है (अर्थात plotmath)? यदि यह सिर्फ एक मजबूत है, तो चरित्र वेक्टर में '\ n' पॉप करें। –

+0

शायद मैं आपके सुझाव को समझ नहीं पा रहा हूं, लेकिन मैं लेबल में \ n शामिल करता हूं। मुझे अपने आवेदन में कुछ प्रतीकों का उपयोग करने के लिए अभिव्यक्ति की आवश्यकता है (उदा। सबस्क्रिप्ट और डिग्री)। – metasequoia

+0

ठीक है, अपने उदाहरण अभिव्यक्ति सरल पेस्ट() की जरूरत नहीं है(), करना होगा। Atop() ऑपरेटर देखें? Plotmath –

उत्तर

46

मुझे लगता है कि यह एक बग है। (या इस तथ्य का एक परिणाम कि "बहु-पंक्ति अभिव्यक्ति समर्थित नहीं हैं", जैसा कि आपने लिंक किए गए वार्तालाप में बताया है)।

वैकल्पिक हल है कि गेविन सिम्पसन का संकेत है:

#For convenience redefine p as the unlabeled plot 
p <- ggplot(mtcars,aes(x=wt,y=mpg))+geom_point() 

#Use atop to fake a line break 
p + xlab(expression(atop("A long string of text for the purpose", paste("of illustrating my point" [reported])))) 

enter image description here

यह सच लाइन सबस्क्रिप्ट साथ टूट जाता है का उपयोग करना संभव है। नीचे कम उदाहरण है, जो अपने उदाहरण के रूप में ही रूप है में, सबस्क्रिप्ट सही ढंग से पाठ के बाकी के निकट रख दिया गया है, लेकिन पाठ की दो पंक्तियाँ सही ढंग से केंद्रित नहीं कर रहे हैं:

p + xlab(expression(paste("line1 \n line2 a" [b]))) 

enter image description here

मुझे लगता है कि दोनों मामलों में, सबस्क्रिप्ट को गलत रखा गया है जब पाठ की ऊपरी पंक्ति टेक्स्ट की निचली पंक्ति से अधिक लंबी होती है। की तुलना करें

p + xlab(expression(paste("abc \n abcd" [reported]))) 

enter image description here

p + xlab(expression(paste("abc \n ab" [reported]))) 

enter image description here

सबस्क्रिप्ट हमेशा समाप्त होता है सिर्फ ऊपरी रेखा के दाहिने सिरे के अधिकार के लिए गठबंधन।

p + xlab(expression(paste("abcdefghijklmnop \n ab" [reported]))) 

enter image description here

+1

अच्छा प्रदर्शन। सुनिश्चित नहीं है कि सबस्क्रिप्ट के बारे में क्या करना है, लेकिन कारण दूसरी पंक्ति के * प्रारंभ * दाईं ओर थोड़ा सा बदल जाता है क्योंकि न्यूलाइन कैरेक्टर के बाद अतिरिक्त स्थान होता है।पी + xlab दर्ज करना (अभिव्यक्ति (पेस्ट ("abcdefghijklmnop \ nab" [रिपोर्ट किया गया])) पी + xlab के बजाय (अभिव्यक्ति (पेस्ट ("abcdefghijklmnop \ n ab" [रिपोर्ट])) कम से कम सुनिश्चित करता है कि दोनों पंक्तियां * एक ही स्थिति में * शुरू करें ... हालांकि स्वीकार्य रूप से यह सबस्क्रिप्ट से पहले अस्पष्ट अंतर के आसपास नहीं मिलता है। – user3482899

9

आप इस चाल इस्तेमाल कर सकते हैं,

library(gridExtra) 
library(grid) 

element_custom <- function() { 
    structure(list(), class = c("element_custom", "element_text")) 
} 

element_grob.element_custom <- function(element, label="", ...) { 

    mytheme <- ttheme_minimal(core = list(fg_params = list(parse=TRUE, 
                 hjust=0, x=0.1))) 
    disect <- strsplit(label, "\\n")[[1]] 
    tableGrob(as.matrix(disect), theme=mytheme) 
} 

# default method is unreliable 
heightDetails.gtable <- function(x) sum(x$heights) 

ggplot(iris, aes(Sepal.Length, Sepal.Width)) + 
    geom_line() + 
    labs(x= "First~line \n italic('and a second') \n integral(f(x)*dx, a, b)")+ 
    (theme_grey() %+replace% theme(axis.title.x = element_custom())) 

enter image description here

+0

अब मेरे लिए बहुत उपयोगी होगा ... लेकिन आर 3.4.0 और ggplot2_2.2.1 के साथ लायक नहीं है :( – julou