2012-05-21 10 views
27

के साथ उल्लिखित पाठ मुझे यह जानना है कि ggplot2 के साथ "रूपरेखा पाठ" को आकर्षित करने का कोई तरीका है, उदाहरण के लिए नक्शे जैसे पृष्ठभूमि पर आसानी से पठनीय बनाने के लिए, एक छोटी सफेद सीमा के साथ काली पाठ।ggplot2

आदर्श रूप में मैं लेबल के एक ही प्रकार प्राप्त करने के लिए आपको Google नक्शे पर देख सकते हैं करना चाहते हैं:

enter image description here

किसी भी संकेत के लिए अग्रिम धन्यवाद!

+0

[संबंधित प्रश्न] (http://stackoverflow.com/questions/7734535/control-font-thickness-without-changing-font-size) – baptiste

उत्तर

15

यहाँ एक दृष्टिकोण है कि TeachingDemos पैकेज में shadowtext समारोह से सामान्य विचार को लागू करता है। कुछ हिस्सों को सरल बनाने के लिए मध्य भाग के लिए कोड को फ़ंक्शन में लपेटा जा सकता है। उदाहरण तो एकदम रिची कपास के जवाब से चोरी हो गया है:

d <- diamonds[sample(nrow(diamonds), 10), ] 


p <- ggplot(d, aes(carat, price)) 
theta <- seq(pi/8, 2*pi, length.out=16) 
xo <- diff(range(d$carat))/200 
yo <- diff(range(d$price))/200 
for(i in theta) { 
    p <- p + geom_text( 
     bquote(aes(x=carat+.(cos(i)*xo),y=price+.(sin(i)*yo),label=cut)), 
        size=12, colour='black') 
} 
p <- p + geom_text(aes(label=cut), size=12, colour='white') 
p <- p + opts(panel.background=theme_rect(fill='green')) 
print(p) 

enter image description here

+0

कई नई परतें जोड़ना शायद थोड़ा अधिक है, तो आप इसके बजाय एक परिभाषित कर सकते हैं [grob] (http://stackoverflow.com/questions/7734535/control-font-thickness-without-changing-font-size) + geom जो 'textGrob + geom_text' को एक परत के रूप में बदल देता है। – baptiste

+0

यह बहुत चालाक है। मुझें यह पसंद है। –

+0

एक और छोटी समस्या यह है कि सभी काले लेबल एक बार में लिखे जाते हैं, और फिर सभी सफेद लेबल। यह आदर्श नहीं है जहां लेबल आपके उदाहरण के निचले बाएं कोने में ओवरलैप करते हैं। लेकिन यह निश्चित रूप से अब तक का सबसे अच्छा जवाब है, धन्यवाद! – juba

6

आदर्श या बहुत लचीला नहीं है लेकिन आप बोल्ड मोनो टेक्स्ट ड्राइंग करके प्रभाव प्राप्त कर सकते हैं, फिर शीर्ष पर मानक मोनो टेक्स्ट।

मैंने मानचित्र को अनुकरण करने के लिए एक हरे रंग की पैनल पृष्ठभूमि का उपयोग किया है।

d <- diamonds[sample(nrow(diamonds), 10), ] 

(p <- ggplot(d, aes(carat, price)) + 
    geom_text(
    aes(label = cut, family = "mono", fontface = "bold"), 
    size = 12, 
    colour = "black" 
) + 
    geom_text(
    aes(label = cut, family = "mono"), 
    size = 12, 
    colour = "white" 
) + 
    opts(panel.background = theme_rect(fill = "green")) 
) 

text-on-bold-text with the diamonds dataset

1

ग्रेग बर्फ द्वारा स्वीकार कर लिया जवाब aes बजाय aes_q की कॉल के कारण [email protected] साथ अब और काम नहीं करता।

उपयोग

for(i in theta) { 
    p <- p + geom_text( 
    aes_q(x = bquote(carat+.(cos(i)*xo)), 
      y = bquote(price+.(sin(i)*yo)), 
      label = ~cut), 
    size=12, colour='black') 
} 

बजाय।

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