2013-03-20 6 views
10

मैं अपने डेटा और एनोवा आंकड़ों को देखना चाहता हूं। महत्वपूर्ण अंतर और बातचीत का संकेत देने वाली अतिरिक्त रेखाओं के साथ एक बारप्लॉट का उपयोग करना ऐसा करना आम है। आर का उपयोग करके आप इस तरह साजिश कैसे बनाते हैं?बारप्लॉट?

महत्वपूर्ण मतभेद:

significant differences

महत्वपूर्ण बातचीत:

significant interactions

पृष्ठभूमि

मैं वर्तमान मुद्दों कर रहा हूँ

यह मैं क्या चाहते हैं सलाखों और आत्मविश्वास अंतराल के लिए barplot2{ggplots} का उपयोग करके, लेकिन मैं नौकरी पाने के लिए किसी भी पैकेज/प्रक्रिया का उपयोग करने के लिए तैयार हूं। आंकड़े प्राप्त करने के लिए मैं वर्तमान में अंतर के लिए TukeyHSD{stats} या pairwise.t.test{stats} का उपयोग कर रहा हूं और एनोवा फ़ंक्शंस में से एक (aov, ezANOVA{ez}, gls{nlme}) का उपयोग कर रहा हूं। barplot2 with CIs

+2

मल्टीकंप में एक plot.cld फ़ंक्शन है, जहां आप अपने सलाखों के ऊपर अक्षरों को महत्व का संकेत दे सकते हैं। Perhabs यह भी आपके लिए कुछ है ... – EDi

+0

'agricolae' पैकेज से' bar.group' भी है जो आपके लिए पत्र रखता है। – mnel

+0

यदि आप बेस आर के 'बारप्लॉट' का उपयोग करते हैं, तो आप बार के केंद्र बिंदुओं को 'बारस्टोर <- बारप्लॉट (1: 3)' स्टोर कर सकते हैं। सत्यापित करने के लिए, यह काम करता है, 'abline (v = barstore)' आज़माएं और ध्यान दें कि लंबवत रेखाएं बार के केंद्र के माध्यम से कट जाती हैं। 'सेगमेंट' का उपयोग करके आप अपनी तुलना/इंटरैक्शन लाइनों को आकर्षित करने के लिए इन संग्रहीत बिंदुओं का उपयोग करने में सक्षम हो सकते हैं। – thelatemail

उत्तर

9

आप पुस्तकालय gplots से समारोह barplot2() का उपयोग कर रहे हैं, यह दृष्टिकोण का उपयोग कर उदाहरण दे देंगे:

बस आपको जानकारी देने के लिए, यह मेरा वर्तमान साजिश है।

सबसे पहले, barplot2() फ़ंक्शन की सहायता फ़ाइल में दी गई बारप्लॉट बनाई गई। ci.l और ci.u नकली आत्मविश्वास अंतराल मूल्य हैं। बारप्लॉट वस्तु के रूप में सहेजा जाना चाहिए।

hh <- t(VADeaths)[1:2, 5:1] 
mybarcol <- "gray20" 
ci.l <- hh * 0.85 
ci.u <- hh * 1.15 
mp <- barplot2(hh, beside = TRUE, 
       col = c("grey12", "grey82"), 
       legend = colnames(VADeaths)[1:2], ylim = c(0, 100), 
       cex.names = 1.5, plot.ci = TRUE, ci.l = ci.l, ci.u = ci.u) 

आप वस्तु mp पर देखें, तो इसमें एक्स सभी सलाखों के लिए समन्वय करता है।

mp 
    [,1] [,2] [,3] [,4] [,5] 
[1,] 1.5 4.5 7.5 10.5 13.5 
[2,] 2.5 5.5 8.5 11.5 14.5 

अब मैं खंडों के वाई मानों के लिए निर्देशांक की गणना करने के लिए ऊपरी आत्मविश्वास अंतराल मानों का उपयोग करता हूं। सेगमेंट स्थिति में शुरू होगा जो आत्मविश्वास अंतराल के अंत में 1 अधिक होगा। y.cord में चार पंक्तियां हैं - पहली और दूसरी पंक्ति पहली बार और दूसरी दो पंक्तियों के साथ दूसरी बार के अनुरूप होती है। उच्चतम वाई मान प्रत्येक बार जोड़ी के लिए आत्मविश्वास अंतराल के अधिकतम मूल्यों से गणना की जाती है। x.cord मान केवल उसी मान को दोहराएं जो mp ऑब्जेक्ट में है, प्रत्येक 2 बार।

y.cord<-rbind(c(ci.u[1,]+1),c(apply(ci.u,2,max)+5), 
      c(apply(ci.u,2,max)+5),c(ci.u[2,]+1)) 
x.cord<-apply(mp,2,function(x) rep(x,each=2)) 

बाद barplot उपयोग sapply() किया जाता है पाँच रेखा खंड बनाने के लिए गणना की निर्देशांकों का उपयोग कर (क्योंकि इस बार 5 समूह हैं)।

sapply(1:5,function(x) lines(x.cord[,x],y.cord[,x])) 

प्लॉट करने के लिए क्षेत्रों के ऊपर ग्रंथों, x और y निर्देशांक की गणना जहां x दो बार एक्स मूल्यों के मध्य बिंदु है और y मूल्य प्रत्येक बार जोड़ी प्लस कुछ निरंतर के लिए विश्वास के अंतराल के अधिक से अधिक मूल्यों से गणना की जाती है। फिर जानकारी जोड़ने के लिए फ़ंक्शन text() का उपयोग करें।

x.text<-colMeans(mp) 
y.text<-apply(ci.u,2,max)+7 
text(c("*","**","***","NS","***"),x=x.text,y=y.text) 

enter image description here

2

मुझे लगता है कि अब आपके सवाल किया गया है और अधिक या कम संबोधित किया, तो मैं बजाय अलग तरीके है कि बहुत अपने डेटा के दृश्य प्रतिनिधित्व में बेहतर है का उपयोग करने के लिए प्रोत्साहित करते हैं जाएगा - dotplots। एक उदाहरण के रूप dotplot समान डेटा बिंदुओं का निर्माण करने के लिए अपने barplot तुलना:

#example data similar to your barplot 
d <- data.frame(group=rep(c("control","group1","group2"),each=4), 
       esker=c(1.6,1.4,1.8,1.5,2,1.8,1.6,1.4,2.3,2,1.7,1.4), 
       se=rep(0.1,12), 
       cond=rep(c("t1","t2","t3","t4"),3)) 
#dotplot - you need Hmisc library for version with error bars 
library(Hmisc) 
Dotplot(cond ~ Cbind(esker, esker+se, esker-se) | group, data=d, col=1, 
     layout=c(1,3), aspect="xy", 
     par.settings = list(dot.line=list(lwd=0), plot.line=list(col=1))) 

enter image description here

यह barplot से तुलना करें। डॉटप्लॉट में, क्षैतिज रूप से प्लॉट किए जाने पर मतभेदों को देखना बहुत आसान होता है, आपको शर्तों को दिखाने के लिए अतिरिक्त किंवदंती या बार या रंगों की आवश्यकता नहीं होती है, आपको दिशानिर्देशों और अन्य शोर तत्वों की आवश्यकता नहीं होती है। आपके पास उन तीन पैनलों में निहित सबकुछ है। बेशक, मैं समझता हूं कि आप अपने महत्वपूर्ण प्रभावों को हाइलाइट करना चाहते हैं, और शायद यह कुछ छोटी स्थितियों के लिए ठीक काम करता है। लेकिन अगर कारक की संख्या बढ़ जाती है, तो साजिश सितारों और छल से बहती है।

इसे आसान रखें। इसे डॉटप्लॉट रखें। इस पर अधिक के लिए विलियम क्लीवलैंड और एडवर्ड टुफ्टे किताबों की जांच करें।

0

मैं barplot के बजाय ggplot उपयोग करने की अनुशंसा, और आप इस तरह मैन्युअल रूप से लाइनों के निर्माण कर सकते हैं:

यह निम्नलिखित की तरह एक data.table के साथ शुरू होता है: data.table used

gg <- ggplot(data, aes(x = time, y = mean, fill = type)) + 
    geom_bar(stat = "identity", position = "dodge") + 
    scale_fill_manual(values = c("RGX" = "royalblue2", "EX" = "tomato2")) + 
    xlab("Post-treatment Time Point (months)") + 
    ylab(paste("data", "Change Score")) + 
    scale_y_continuous(expand = c(0, 0)) + 
    ylim(c(0,max(data$mean*1.5))) 

# add horizontal bars 
gg <- gg + geom_errorbar(aes(ymax = hline, ymin = hline), width = 0.45) 

# add vertical bars 
gg <- gg + geom_linerange(aes(ymax = max(data$mean)+3, ymin = max(data$mean)+1), position = position_dodge(0.9)) 

# add asterisks 
gg <- gg + geom_text(data = data[1:2], aes(y = max(data$mean)+4), label = ifelse(data$p_value[1:2] <= 0.4, "*", ifelse(data$p_value[1:2] <= 0.05, "*", "")), size = 8) 

gg 

plot output

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