Please download the data here!कैसे कई ggplot2 भूखंडों संरेखित और
लक्ष्य उनमें से सब कुछ खत्म हो छाया जोड़ने के लिए: प्लॉट एक छवि इस तरह:
विशेषताएं: 1 दो अलग-अलग समय श्रृंखला; 2. निचले पैनल में एक रिवर्स वाई-अक्ष है; 3. दो भूखंडों पर छाया।
संभावित समाधान:
1. Facetting उचित नहीं है - (1) सिर्फ एक पहलू के y अक्ष रिवर्स जबकि अन्य (रों) unchanges रखने नहीं कर सकता। (2) व्यक्तिगत पहलुओं को एक-एक करके समायोजित करना मुश्किल है।
2. व्यूपोर्ट का उपयोग करते हुए निम्नलिखित कोड का उपयोग करने वाले भूखंडों की व्यवस्था करने के:
library(ggplot2)
library(grid)
library(gridExtra)
##Import data
df<- read.csv("D:\\R\\SF_Question.csv")
##Draw individual plots
#the lower panel
p1<- ggplot(df, aes(TIME1, VARIABLE1)) + geom_line() + scale_y_reverse() + labs(x="AGE") + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000))
#the upper panel
p2<- ggplot(df, aes(TIME2, V2)) + geom_line() + labs(x=NULL) + scale_x_continuous(breaks = seq(1000,2000,200), limits = c(1000,2000)) + theme(axis.text.x=element_blank())
##For the shadows
#shadow position
rects<- data.frame(x1=c(1100,1800),x2=c(1300,1850),y1=c(0,0),y2=c(100,100))
#make shadows clean (hide axis, ticks, labels, background and grids)
xquiet <- scale_x_continuous("", breaks = NULL)
yquiet <- scale_y_continuous("", breaks = NULL)
bgquiet<- theme(panel.background = element_rect(fill = "transparent", colour = NA))
plotquiet<- theme(plot.background = element_rect(fill = "transparent", colour = NA))
quiet <- list(xquiet, yquiet, bgquiet, plotquiet)
prects<- ggplot(rects,aes(xmin=x1,xmax=x2,ymin=y1,ymax=y2))+ geom_rect(alpha=0.1,fill="blue") + coord_cartesian(xlim = c(1000, 2000)) + quiet
##Arrange plots
pushViewport(viewport(layout = grid.layout(2, 1)))
vplayout <- function(x, y)
viewport(layout.pos.row = x, layout.pos.col = y)
#arrange time series
print(p2, vp = vplayout(1, 1))
print(p1, vp = vplayout(2, 1))
#arrange shadows
print(prects, vp=vplayout(1:2,1))
समस्याएं:
- x- अक्ष सही ढंग से संरेखित नहीं करता है;
- छाया स्थान गलत हैं (एक्स-अक्ष के गलत लाइन-अप के कारण)।
सभी चारों ओर Googling के बाद:
- मैं सबसे पहले देखा "align.plots() ggExtra से" यह काम कर सकता है। हालांकि, इसे लेखक द्वारा बहिष्कृत कर दिया गया है;
- फिर मैंने gglayout solution को आजमाया है, लेकिन कोई भाग्य नहीं - मैं "अत्याधुनिक" पैकेज भी इंस्टॉल नहीं कर सका;
अंत में, मैं gtable solution की कोशिश की है निम्नलिखित कोड का उपयोग कर:
gp1<- ggplot_gtable(ggplot_build(p1)) gp2<- ggplot_gtable(ggplot_build(p2)) gprects<- ggplot_gtable(ggplot_build(prects)) maxWidth = unit.pmax(gp1$widths[2:3], gp2$widths[2:3], gprects$widths[2:3]) gp1$widths[2:3] <- maxWidth gp2$widths[2:3] <- maxWidth gprects$widths[2:3] <- maxWidth grid.arrange(gp2, gp1, gprects)
अब, ऊपरी और निचले पैनल के x- अक्ष सही ढंग से संरेखित है। लेकिन छाया की स्थिति अभी भी गलत है। और सबसे महत्वपूर्ण बात यह है कि मैं दो बार श्रृंखला पर छाया साजिश को ओवरलैप नहीं कर सकता। कई दिनों के प्रयासों के बाद, मैं लगभग छोड़ देता हूं ...
क्या कोई यहां मुझे हाथ दे सकता है?
दिखाया गया है शीर्ष y अक्ष रिवर्स सकता है आप बार-बार ग्राफ के इस प्रकार करने के लिए है? मेरे लिए ऐसा लगता है कि आपके द्वारा पोस्ट की गई मूल में एमएस पेंट या कुछ अन्य ऐसे फोटो संपादन सॉफ्टवेयर से ओवरले है। –
आप शायद दो ग्राफ एक साथ रख सकते हैं और 'ग्रिड' पैकेज के साथ आयतों को ओवरले कर सकते हैं। –
** @ ब्रैंडन **: हां, एक पालीओक्लिमैटोलॉजी लड़के के रूप में, अक्सर कई बार श्रृंखला की तुलना करना और एक साजिश पर दिलचस्प भागों को चिह्नित करना आवश्यक है। आमतौर पर, मैं इस काम को करने के लिए गोल्डन सॉफ्टवेयर ग्रैफर का उपयोग करता हूं। यह समय लेने वाला है क्योंकि आपको बार-बार कई संपत्तियां सेट करनी होंगी। यही कारण है कि मैं आर। ** @ सेबेस्टियन ** का प्रयास करता हूं: छवि को रखने के लिए बहुत बहुत धन्यवाद, यह वास्तव में सहायक है! और मैं ग्रिड पैकेज से बहुत परिचित नहीं हूं। वैसे भी, मैं कोशिश करूँगा। – bearcat