2012-05-04 18 views
7

मैं आर-क्रैन में एक बॉक्सप्लॉट बनाने की कोशिश करने पर काम कर रहा हूं जिसे एक्स-अक्ष पर दो अलग-अलग कारकों द्वारा वर्गीकृत किया गया है। मेरी समस्या +20 के स्तर के साथ एक कारक के लिए लेबल बनाने में निहित है जो दूसरे ग्राफ को लेबल करने के लिए एक किंवदंती का उपयोग करते हुए उचित ग्राफ को उचित रूप से फैलाती है जिसमें केवल 2 से 3 स्तर होते हैं।आर - एकाधिक कारक लेबल के साथ बॉक्सप्लॉट

यहाँ एक परीक्षण स्क्रिप्ट है कि मोटे तौर पर की नकल करता है अपने वास्तविक डाटासेट:

d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500)) 
# first factor has 20+ levels 
d$f1<-factor(d$f1) 
# second factor a,b,c 
d$f2<-factor(d$f2) 

boxplot(x~f2*f1,data=d,col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE) 

# y axis is numeric and works fine 
yts=pretty(d$x,n=5) 
axis(2,yts) 

# I know this doesn't work; what I'd like is to spread the factors out 
# so the each group of three(a,b,c) is labeled correctly 
axis(1,at=seq(1:20)) 

# Use the legend to handle the f2 factor labels 
legend(1, max(d$x), c("a", "b","c"),fill = c("red", "blue","green")) 

किसी भी मदद के लिए धन्यवाद

उत्तर

13

Fwiw, एक ggplot2 समाधान:

library(ggplot2) 
ggplot(data = d, aes(x = f1, y = x)) + 
    geom_boxplot(aes(fill = f2), width = 0.8) + theme_bw() 

enter image description here

+0

मुझे कभी एहसास नहीं हुआ कि आप थीम 'ggplot' प्लॉट्स कर सकते हैं! बदसूरत ग्रे पृष्ठभूमि के कारण मैं हमेशा उनका उपयोग बंद कर दिया गया था। मुझे यह दिखाने के लिए धन्यवाद। – thelatemail

+0

@thelatemail, थीमिंग साजिश में लगभग किसी भी तत्व को समायोजित/संशोधित करने की अनुमति देता है। –

+0

@thelatemail - विषयों के एक सिंहावलोकन के लिए [यहां] (https://github.com/hadley/ggplot2/wiki/Themes) देखें। – Chase

5

आप 3 बक्से के प्रत्येक समूह के बीच में एक लेबल चाहते हैं, कुछ इस तरह की कोशिश :

axis(1,at=seq(2,60,3),labels=1:20,cex.axis=0.7) 

enter image description here

सामान्यीकरण करने के लिए, इस होगा:

groups <- 20 
numbox <- 3 
total <- groups * numbox 
xpoints <- seq(median(1:numbox),total,numbox) 
+0

आप दोनों के लिए धन्यवाद, मैं वास्तव में क्या देख रहा था। – Kerry

+0

@ केरी - कोई चिंता नहीं! उस स्थिति में, हमें दोनों को एक ऊपरी (ऊपर तीर) देना न भूलें और एक उत्तर (तीर के नीचे टिक प्रतीक) चुनें – thelatemail