2010-01-22 35 views
5

में एक घबराना साजिश के उपसमूह लेबल जोड़ें मैं घबराना-साजिश की तरह एक लगभग-boxplot है:ggplot2

dt <- rbind(se,cb,cb.se) 
qplot(ds, size, data=dt, geom="jitter", colour=root, facets = test ~ .) 

plot http://i50.tinypic.com/1zbfjih.png

मैं बीच में प्रत्येक समूह के लिए एक सारांश लेबल डाल करने के लिए अच्छा लगेगा साजिश के - उदाहरण के लिए आकार यहां योग:

aggregate(list(size=dt$size), list(dt$ds, dt$test), sum) 

    Group.1 Group.2 size 
1  b217  se 9847 
2  c10  se 97296 
3  c613  se 21633 
4  c7  se 207540 
... 

मैं लेबल जोड़ने के लिए + geom_text(aes(x=ds, y=128, label=sum(size)), size=2) का उपयोग कर की कोशिश की है, लेकिन मैं प्रत्येक स्थिति पर एक ही लेबल मिल - मैं की राशि कैसे प्राप्त कर सकते हैं डेटा के बस उस खंड?

संपादित करें: यहाँ जहां मैं अब पर हूँ है - हो सकता है मैं सिर्फ गलत दिशा में जा रहा हूँ

data <- rbind(se,cb,cb.se) 
labels <-ddply(data, c("ds", "test"), function(df) sum(df$size)) 
ggplot(data=data, aes(x=ds)) + 
    geom_jitter(aes(y=size, colour=root)) + 
    geom_text(data=labels, aes(x=ds, y=600, label=V1), size=3) + 
    facet_wrap(test ~ .) 

इस कोड काम नहीं करता है - मैं एक undefined columns selected त्रुटि मिलती है ... कहीं । हो सकता है कि यह एकाधिक data= अनुभागों की वजह से हो?

+0

एक त्वरित पढ़ने से में एक नया स्तंभ बनाने के लिए, कि कोड मेरे लिए ठीक लग रहा है। पुनरुत्पादित उदाहरण के बिना और कहना मुश्किल है। – hadley

+1

मैंने एक समाधान पोस्ट किया है। दुर्भाग्यवश, चूंकि आपने नमूना डेटा प्रदान नहीं किया है, इसलिए मुझे यादृच्छिक डेटा फिर से बनाना था। इसका मतलब है कि समाधान आपके डेटा को प्रतिबिंबित कर सकता है या नहीं। भविष्य के संदर्भ के लिए, यदि आप अपनी समस्या का एक न्यूनतम उदाहरण बनाते हैं और कुछ नमूना डेटा पेस्ट करते हैं तो हम अधिक उत्तरों आकर्षित करेंगे जिन्हें हम आपकी समस्या को पुन: उत्पन्न करने के लिए उपयोग कर सकते हैं। वैसे भी, मुझे उम्मीद है कि यह मदद करता है। – Andrie

उत्तर

6

चूंकि आप नमूना डेटा प्रदान नहीं करते हैं, इसलिए मैं यादृच्छिक डेटा का उपयोग करके समाधान प्रदर्शित करूंगा।

set.seed(1) 
n <- 100 
dat <- data.frame(
    ds = sample(paste("x", 1:8, sep=""), n, replace=TRUE), 
    size = runif(n, 0, 250), 
    root = sample(c(TRUE, FALSE), n, replace=TRUE), 
    test = sample(c("se", "cb", "cb.se"), n, replace=TRUE) 
) 


head(dat) 
    ds  size root test 
1 x3 163.68098 TRUE cb.se 
2 x3 88.29932 TRUE se 
3 x5 67.56504 FALSE cb 
4 x8 248.17102 TRUE cb 
5 x2 158.37332 TRUE cb 
6 x8 53.30203 FALSE cb.se 

p <- ggplot(dat, aes(x=ds, y=size)) + 
    geom_jitter(aes(colour=root)) + 
    facet_grid(test~.) 

लेबल डेटा युक्त डेटा फ्रेम बनाएँ। summarize के उपयोग पर ध्यान दें। यह ddply बताता data.frame

labels <- ddply(dat, .(ds, test), summarize, size=round(sum(size), 0)) 
head(labels) 
    ds test size 
1 x1 cb 193 
2 x1 cb.se 615 
3 x1 se 274 
4 x2 cb 272 
5 x2 cb.se 341 
6 x2 se 1012 

p + geom_text(aes(x=ds, label=size, y=128), data=labels, size=2) 

enter image description here

+0

यह वही दिखता है जो मुझे चाहिए था। धन्यवाद! – Thelema

+1

@ थील्मा, खुशी है कि मैं मदद की हो सकती है। (बक्षीस आवंटित करना याद रखें, क्योंकि यह स्वचालित रूप से नहीं होता है) – Andrie

+0

अच्छी तरह से योग्य है। अच्छा। और त्वरित :) –

1

यहां एक नज़र डालें। यह उपयोगी हो सकता है Adding direct labels to ggplot2 and lattice plots

+0

डायरेक्टलैबल्स मेरी समस्या का समाधान नहीं करता है, यह जिटर प्लॉट पर अच्छी तरह से स्थिति नहीं रखता है, और यह मेरे पौराणिक लेबलों का उपयोग लेबल के बजाय चार्ट लेबल करने के लिए करना चाहता है। – Thelema