2012-05-01 15 views
5

ggplot2 के लिए यह सवाल यहां के एक निरंतरता है जोड़ें: Create non-overlapping stacked area plot with ggplot2प्रत्यक्ष लेबल geom_area चार्ट

मैं एक ggplot2 क्षेत्र निम्नलिखित कोड द्वारा बनाई चार्ट है। मैं चाहता हूं कि names से लेबल ग्राफ के दाईं ओर गठबंधन हों। मुझे लगता है कि directlabels काम कर सकता है, लेकिन जो भी सबसे चालाक है कोशिश करने के लिए तैयार हूं।

require(ggplot2) 
require(plyr) 
require(RColorBrewer) 
require(RCurl) 
require(directlabels) 

link <- getURL("http://dl.dropbox.com/u/25609375/so_data/final.txt") 
dat <- read.csv(textConnection(link), sep=' ', header=FALSE, 
     col.names=c('count', 'name', 'episode')) 


dat <- ddply(dat, .(episode), transform, percent = count/sum(count)) 

# needed to make geom_area not freak out because of missing value 
dat2 <- rbind(dat, data.frame(count = 0, name = 'lane', 
          episode = '02-tea-leaves', percent = 0)) 

g <- ggplot(arrange(dat2,name,episode), aes(x=episode,y=percent)) + 
    geom_area(aes(fill=name, group = name), position='stack') + scale_fill_brewer() 

g1 <- g + geom_dl(method='last.points', aes(label=name)) 

enter image description here

मैं ब्रांड directlabels के लिए नए और वास्तव में यकीन नहीं कैसे लेबल क्षेत्रों के रूप में एक ही रंग के साथ ग्राफ के दाईं ओर संरेखित करने के लिए प्राप्त करने के लिए कर रहा हूँ।

उत्तर

5

आप लेबल्स जोड़ने के लिए सरल geom_text का उपयोग कर सकते हैं।

dd=subset(dat, episode=="06-at-the-codfish-ball") 

तब कारक स्तर से डेटा फ्रेम आदेश:

dd = dd[with(dd, order(name, levels(dd$name))),] 

तब की साजिश रचने के लिए संचयी प्रतिशत से काम करते हैं:

dd$cum = cumsum(dd$percent) 
सबसे पहले, आप अंतिम एक्स मूल्य प्राप्त करने के लिए सेट डेटा सबसेट

फिर मानक geom_text कॉल का उपयोग करें:

g + geom_text(data=dd, aes(x=6, y=cum, label=name)) 

ओह, और आप कोण करने के लिए अपने x- अक्ष लेबल की साजिश रचने के ऊपर से बचने के लिए चाहते हो सकता है:

g + opts(axis.text.x=theme_text(angle=-25, hjust=0.5, size = 8)) 

ग्राफ़

enter image description here

+0

जवाब के लिए धन्यवाद। मुझे डायरेक्टलैबल्स को समझने की ज़रूरत है, क्योंकि मुझे नहीं पता कि यह दृष्टिकोण कितना सामान्य है। – Idr

+0

@csgillespie, यह उपयोगी धन्यवाद था। यहां मैंने सिंटैक्स का उपयोग किया (एक और डीएफ): '' + geom_text (डेटा = सबसेट (डीएफ, वर्ष == "2012"), एईएस (एक्स = वर्ष, वाई = cumsum (मान), लेबल = चर), vjust = 6 , hjust = -.2, आकार = 4) '', जहां मैंने इसे 'vjust'' और' hjust'' पैरामीटर प्राप्त करने के लिए सही तरीके से पाया। मैं यह कहने के लिए कह रहा हूं कि आप '' cumsum'' को '' aes() '' में पारित कर सकते हैं, जिसे मैंने परीक्षण और त्रुटि से खोजा था। दाईं ओर की किंवदंती के लिए, छवि के समान क्रम में रंग प्राप्त करने के लिए '' + गाइड (fill = guide_legend (रिवर्स = TRUE)) '' सेट करना उपयोगी है। क्या आप बहिष्कृत ''opts'' को अपडेट करना चाहते हैं? – PatrickT

+0

और उपरोक्त मेरी टिप्पणी में डेटाफ्रेम ('06-at-the-codfish-ball'' और' '2012'' 'के अंतिम तत्व को पकड़ने के लिए, आप' पूंछ()' ' तर्क '1', उदाहरण के साथ कार्य करें 'पूंछ (डीएफ 2.1 $ वर्ष, 1)' ' – PatrickT

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