2013-05-17 5 views
9

ggplot के साथ ट्रेन करने और लिखने में अपने कौशल में सुधार करने के लिए आर कार्यों में मैंने कार्यों की एक श्रृंखला बनाने का निर्णय लिया जो सभी प्रकार के अतिरिक्त क्षेत्रों के साथ जीवित भूखंड पैदा करता है। मैं बुनियादी जीवित साजिश के लिए एक अच्छा कामकाजी कार्य करने में कामयाब रहा, अब मैं अतिरिक्त हो रहा हूं। एक चीज जो मैं करना चाहूंगा वह एक विकल्प है जो जीवित साजिश के शीर्ष पर दिए गए समय बिंदु पर जोखिम की संख्या के क्षेत्रीय भूखंड को ढेर करता है। मैं इसे ggplot के facet_grid विकल्प की तरह दिखाना चाहता हूं, लेकिन मैंने इस फ़ंक्शन के साथ ऐसा करने का प्रबंधन नहीं किया। मैं नहीं चाहता कि दो भूखंड बांधें, जैसे हम grid.arrange के साथ कर सकते हैं, लेकिन एक ही एक्स-अक्ष होने के बजाय।एक पहलू तरीके से अलग-अलग भूखंडों को ढेर

निम्नलिखित कोड दो (सरलीकृत) भूखंडों का उत्पादन करता है जिन्हें मैं एक दूसरे के शीर्ष पर ढेर करना चाहता हूं। मैं facet_grid के साथ ऐसा करने की कोशिश की, लेकिन मुझे नहीं लगता समाधान इस

library(survival) 
library(ggplot2) 
data(lung) 
s <- survfit(Surv(time, status) ~ 1, data = lung) 
dat <- data.frame(time = c(0, s$time), 
        surv = c(1, s$surv), 
        nr = c(s$n, s$n.risk)) 
pl1 <- ggplot(dat, aes(time, surv)) + geom_step() 

enter image description here

pl2 <- ggplot(dat, aes(time, nr)) + geom_area() 

enter image description here

उत्तर

13

पहले में निहित है, लंबे प्रारूप के लिए अपने डेटा पिघला।

library(reshape2) 
dat.long<-melt(dat,id.vars="time") 
head(dat.long) 
    time variable  value 
1 0  surv 1.0000000 
2 5  surv 0.9956140 
3 11  surv 0.9824561 
4 12  surv 0.9780702 
5 13  surv 0.9692982 
6 15  surv 0.9649123 

फिर geom_area() में geom_step() और nr डेटा में केवल surv डेटा का उपयोग करने subset() का उपयोग करें और facet_grid() साथ आप variable के रूप में अलग पहलू में प्रत्येक भूखंड Facetting के लिए और subsetting के लिए डेटा को विभाजित करने के लिए किया जाता है मिल जाएगा। scales="free_y" सुंदर अक्ष बना देगा।

ggplot()+geom_step(data=subset(dat.long,variable=="surv"),aes(time,value))+ 
    geom_area(data=subset(dat.long,variable=="nr"),aes(time,value))+ 
    facet_grid(variable~.,scales="free_y") 

enter image description here

+2

बस दूसरों के लिए 'संदर्भ' सबसेट 'समारोह नहीं इस तरह के एक सरल फ़िल्टर के लिए आवश्यक है। 'dat.long [dat.long $ variable ==" surv ",]' 'subet (dat.long, variable ==" surv ") के समान परिणाम देगा। न तो दृष्टिकोण विशेष रूप से बेहतर है, लेकिन विकल्पों के बारे में जागरूक होना अच्छा है। – Dinre

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