2012-09-20 12 views
15

के साथ ggplot कैसे एनोटेट करें (मैं annotate() का उपयोग कर एक ggplot2 प्लॉट में लेटेक्स टेक्स्ट जोड़ना चाहता हूं। अक्षरों लेबल में लेटेक्स जोड़ने के लिए here वर्णित expression() का उपयोग करके, काम नहीं लग रहा है। बुद्धि के लिए:लेटेक्स

# Use expression() to create subscripted text 
p <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() + 
    scale_x_continuous(expression(text[subscript])) 

# But expression() in annotate adds nothing to the plot 
p + annotate("text", x=10, y=40, label=expression(text[subscript])) 

# Passing regular text to annotate works fine 
p + annotate("text", x=10, y=40, label="foo") 

क्यों expression रों अलग ढंग से annotate द्वारा अन्य ggplot कार्यों के द्वारा की तुलना में इलाज कर रहे हैं? और मैं लेटेक्स के साथ कैसे टिप्पणी कर सकता हूं?

+0

आप 'tikzDevice' पैकेज पर एक नज़र डाल सकते हैं ... –

+0

अब सक्रिय रूप से बनाए रखा जाने लगता है। (लेकिन अभी भी संभावित रूप से उपयोगी!) –

+1

मेरी समझ यह है कि यह अभी भी काफी व्यापक रूप से उपयोग किया जाता है, और कार्यात्मक है, लेकिन कठोर सीआरएएन/आर सीएमडी चेक नियमों के कारण अनाथालय की वर्तमान स्थिति में ... इसे अंतिम बार आर-फोर्ज 15 जुलाई में संशोधित किया गया था 2012 ... –

उत्तर

13

आप expression बिना parse तर्क, उपयोग कर सकते हैं:

p + annotate("text", x=10, y=40, label="text[subscript]", parse=TRUE) 
+0

पर वर्तमान विकास की स्थिति क्या आप मेरे लिए पुष्टि कर सकते हैं कि क्या आपको कोई असामान्य व्यवहार मिलता है यदि आप 'लेबल = अभिव्यक्ति' का उपयोग करने का प्रयास करते हैं (पाठ [सबस्क्रिप्ट]), पार्स = सही) '? (मैंने अभी तक 0.9.2 तक अपग्रेड नहीं किया है ...) – joran

+0

हाँ, यह पसंद नहीं है। –

+0

ठीक है ... आज भी थोड़ा गड़बड़ है, और मैंने पहली बार गलती से ऐसा किया था। पहले कभी आर से प्रतिक्रिया की तरह कभी नहीं देखा। अजीब। – joran

4

tikzDevice पैकेज क्रैन पर वापस (नवीनतम संस्करण 0.9 प्रकाशित नवंबर 2015) है।

tikz का उपयोग कर एक पूर्ण LaTeX स्थापना की आवश्यकता है; लाटेक्स दस्तावेज़ में knitr के माध्यम से करना सबसे आसान हो सकता है (केवल dev="tikz" को खंड विकल्पों में सेट करें)। हालांकि, आप इसे एक स्टैंडअलोन आकृति बनाने के लिए भी उपयोग कर सकते हैं। विडंबना यह है कि इस सवाल का सबसे कठिन हिस्सा एक R पैकेज latex2exp बुलाया है एक पाठ सबस्क्रिप्ट, जो \textsubscript आदेश के लिए एक अतिरिक्त LaTeX पैकेज (fixltx2e) की आवश्यकता है ...

library(tikzDevice) 
## add a package to the defaults 
options(tikzLatexPackages= 
      c(getOption("tikzLatexPackages"),"\\usepackage{fixltx2e}")) 
tikz("tikz.tex",standAlone=TRUE) 
library("ggplot2"); theme_set(theme_bw()) 
p <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() + 
    scale_x_continuous(name="text\\textsubscript{subscript}") 
p + annotate("text", x=10, y=40, label="text\\textsubscript{subscript}") 
dev.off() 

system("pdflatex tikz.tex") 

enter image description here

14

हो रही थी जो सहायक हो सकता है।

library(latex2exp) 
library(ggplot2) 

qplot(1, "A")+ 
    ylab(TeX("Formula: $\\frac{2hc^2}{\\lambda^\\beta}$"))+ 
    xlab(TeX("$\\alpha$")) 

Example

अधिक उदाहरण this vignette में पाया जा सकता: यह समारोह TeX जो इस उदाहरण में डॉलर साइन $ के साथ संलग्न कुछ LaTeX भाव को स्वीकार करता है।

+5

आपका उदाहरण लेबल के लिए काम करता है, लेकिन सवाल एनोटेट के बारे में था। आपका उदाहरण मेरे लिए एनोटेट परत में काम नहीं कर रहा है, लेकिन, यदि आप output = 'character' निर्दिष्ट करते हैं और एनोटेट कॉल में 'parse = TRUE' जोड़ते हैं तो यह करता है। 'एनोटेट (geom = 'text', x = 3, y = 3, लेबल = टेक्स (" $ \\ टोपी {वाई} = B_0 + B_1X_1 ", आउटपुट = 'वर्ण'), पार्स = TRUE) ' – svannoy