2014-07-23 6 views
5
यहाँ

साजिश देखें:ggplot2, एक ही साजिश में दो तराजू लागू? शीर्ष नीचे barplot

enter image description here (here से)

मैं barplot ggplot2 का उपयोग कर के दोनों ऊपरी और निचले हिस्से को कैसे पुन: पेश करते हैं?

उदाहरण के लिए, मैं ऊपरी हिस्से

ggplot(data.frame(x=rnorm(1000, 5)), aes(x=x)) + geom_bar() + scale_y_reverse() 

साथ लेकिन अब अगर मैं इस तरह के एक और geom_bar() y के लिए पैमाने उलट है के रूप में किसी अन्य geom_ जोड़ने के लिए, उत्पादन कर सकते हैं। क्या scale_y_reverse() को केवल एक विशिष्ट geom_ पर लागू करना संभव है?

उत्तर

4

ggplot केवल एक वाई-अक्ष स्केल होना पसंद है। सबसे आसान बात यह है कि मूल रूप से अपने डेटा को दोबारा बदलना होगा। यहां हम डेटा को आकर्षित करने के लिए geom_rect का उपयोग कर सकते हैं जहां हम कभी भी पसंद करते हैं और हम इसे समूह समय पर शर्त दे सकते हैं। यहां एक उदाहरण है

#sample data 
dd<-data.frame(
    year=rep(2000:2014, 2), 
    group=rep(letters[1:2], each=15), 
    count=rpois(30, 20) 
) 

और अब हम इसे साजिश कर सकते हैं। लेकिन पहले, के एक वर्ष में मॅक्सिमा ऊंचाई खोजने और अंतरिक्ष

height <- ceiling(max(tapply(dd$count, dd$year, sum))*1.10) 

का एक सा जोड़कर शीर्ष सलाखों के ऑफसेट परिभाषित और यहाँ है कि हम कैसे साजिश

ggplot(dd) + 
    geom_rect(aes(xmin=year-.4, xmax=year+.4, 
    ymin=ifelse(group=="a", 0, height-count), 
    ymax=ifelse(group=="a", count, height), fill=group)) + 
    scale_y_continuous(expand=c(0,0)) 

जाने और वह हमें

दे देंगे

enter image description here

+0

बहुत चालाक हैक! – Vlo

8

एक अन्य विकल्प दो अलग-अलग भूखंडों बनाने के लिए और चीं-चीं से arrangeGrob के साथ उन्हें गठबंधन करने के लिए है xtra पैकेज। साजिश मार्जिन के साथ खेलने के बाद, आप सभ्य दिखने वाले किसी चीज़ पर पहुंच सकते हैं।

library(gridExtra) 
library(ggplot2) 

set.seed(100) 
p2 <- ggplot(data.frame(x=rnorm(1000, 5)), aes(x=x)) + geom_bar() + theme(plot.margin=unit(c(0,0,0,0), 'lines')) 
p1 <- p2 + scale_y_reverse() + 
    theme(plot.margin=unit(c(0, 0, -.8, 0), 'lines'), axis.title.x=element_blank(), 
      axis.text.x=element_blank(), axis.ticks.x=element_blank()) 

p <- arrangeGrob(p1, p2) 
print(p) 

enter image description here

+0

प्रेत डाउनवॉटर! अपना नाम बताएं और खुद को समझाओ! –

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