2015-08-29 17 views
5

पर आधारित विभिन्न रंगों का उपयोग करके प्लॉट टाइम श्रृंखला प्लॉट मैं बहु-रंग वाली एक पंक्ति को प्लॉट करना चाहता हूं, और रंग कारक में इसी मान पर आधारित होते हैं। उदाहरण के लिए, दैनिक स्टॉक बंद मूल्य की एक समय श्रृंखला, जहां एक निश्चित राशि से अधिक समय तक यह बढ़ गया है, वह नीले रंग में है, और जिस दिन यह बहुत से किया गया है वह लाल रंग में है, और अन्य दिनों में यह है उबाऊ काला।कारक

मेरे डेटा एक xts वस्तु (कारक as.numeric(myfactor) के साथ वहाँ में डाल के साथ) में है, और मैं quantmod chartSeries या chart_Series कार्यों का उपयोग किया जा करना चाहते हैं। लेकिन अगर यह असंभव है तो plot का उपयोग करने वाला कुछ पर्याप्त होगा।

कुछ नमूना डेटा:

library(xts) 
x = xts(data.frame(v=(rnorm(50)+10)*10, type=floor(runif(50)*4)), 
    order.by=as.Date("2001-01-01")+1:50) 

और मैं इसे इस तरह प्लॉट कर सकते हैं:

library(quantmod) 
chartSeries(x$v) 
addTA(x$type, type='p') 

कौन इस तरह दिखता है: plot using chartSeries

अर्थात मुझे लगा कि रंगीन रेखा खंडों का उपयोग किए जाने पर शीर्ष चार्ट के साथ नीचे चार्ट में जानकारी से मिलान करना आसान होगा।

+1

आपको कुछ डेटा पोस्ट करना चाहिए। मुझे लगता है कि आप नहीं चाहते हैं कि अधिकांश लोग "लाइन" कहें लेकिन रंगीन "सेगमेंट" चाहते हैं। –

+0

@ बॉन्डडडस्ट मैंने कुछ परीक्षण डेटा जोड़ा है। 'सेगमेंट' जो मैं चाहता हूं वह हो सकता है, हालांकि यह बहुत कम स्तर लगता है (एक्स-अक्ष पर टाइमस्टैम्प के लिए कोई समर्थन नहीं है?) –

उत्तर

1

यह कोड ?segments पर उदाहरण कोड का एक मामूली मोड के रूप में शुरू हुआ और यही कारण है कि ग्राफ का शीर्षक अजीब दिखता है, लेकिन मैंने इसे किसी भी तरह से छोड़ने का फैसला किया। तर्क यह है कि "[।]" के अंदर की शर्तें tail(y,-1) और head(y,-1) के बीच अंतर के रूप में गठित लगातार मूल्यों के बीच अंतर के आधार पर रंगों को "चुनने" के रूप में "मूल" होने के साथ और इस मामले में दहलीज 1 के साथ , लेकिन यह आसानी से बदला जा सकता है:

set.seed(123) 
x <- 1:12; y <- rnorm(12) 
plot(x, y, main = "arrows(.) and segments(.)") 

s <- seq(length(x)-1) 
arrows(x[s], y[s], x[s+1], y[s+1], 
     col= c("black", "red", "blue")[1+       # default=1 
             (tail(y,-1)-head(y,-1) < -1) + # big down (1+1) 
            2*(tail(y,-1)-head(y,-1) > 1) ]) # big up (1+2) 

अगर तुम सिर्फ बोरिंग रेखा खंडों चाहता था आप segments समारोह बल्कि arrows से उपयोग कर सकते हैं।

enter image description here

मैं, एक बार फिर से सवाल पढ़ने आपने कहा कि आप पहले से ही अपने XTS-वस्तु में एक कारक चर था पर एहसास हालांकि मैं समझता हूँ कि है XTS वस्तुओं कारक प्रकार कॉलम पकड़े करने में सक्षम नहीं हो सकता है , क्योंकि वे चिड़ियाघर वर्ग के विस्तार हैं और coredata एक आर मैट्रिक्स है (इसलिए कोई स्तर विशेषताओं)। लेकिन शायद क्वांट-लड़कों के लिए एक कामकाज है? इसलिए कुछ डेटा पोस्ट करने के लिए यह एक और कारण होगा, और कृपया ऑब्जेक्ट पेश करने के लिए dput का उपयोग करें। कंसोल आउटपुट से एक्सटीएस-ऑब्जेक्ट्स बनाना वास्तविक परेशानी है।

2

तो यहां एक ggplot समाधान है। यह थोड़ा और अधिक शामिल है, लेकिन अधिक परिष्कृत प्रारूपण विकल्प प्रदान करता है।

library(quantmod) 
sp500 <- getSymbols("^GSPC", from="2015-01-01", auto.assign=FALSE) 
sp500 <- Cl(sp500)       # extract close 
sp500 <- merge(sp500, dailyReturn(sp500)) # add daily returns 
sp500 <- merge(lag(Cl(sp500),1), sp500) # merge with close lagged by 1 day 

names(sp500) <- c("ymin", "ymax", "return") 
library(ggplot2) 
library(scales) 
df <- with(sp500, 
      data.frame(xmin=c(lag(index(sp500),1)), 
         xmax=index(sp500), 
         ymin, ymax, return)) 
df$status <- with(df,ifelse(return>0.01,"up",ifelse(return< -0.01,"down","neutral"))) 
ggplot(df) + 
    geom_segment(aes(x=xmin, xend=xmax, y=ymin, yend=ymax, color=status)) + 
    scale_color_manual(values=c(up="green", down="red", neutral="grey50"), 
        breaks=c("up","down"), 
        labels=c("Gain > 1%", "Loss > 1%")) + 
    scale_x_date(breaks=date_breaks("months"), labels=date_format("%b"))+ 
    labs(x=NULL, y="Closing Price", title="S&P 500") + 
    theme(panel.background =element_rect(fill="black"), 
     panel.grid = element_blank()) 

अन्य जवाब के साथ के रूप में मूल विचार खंडों रंग लाभ/हानि की भयावहता के आधार पर कोडित आकर्षित करने के लिए है। तो हम बंद कीमतों को निकालने से शुरू करते हैं, रिटर्न का एक कॉलम जोड़ते हैं, और फिर 1 दिन तक बंद होने वाली बंद कीमतों का एक और कॉलम जोड़ें। फिर हम तारीखों के दो कॉलम के साथ एक डेटा.फ्रेम बनाते हैं, जो 1 दिन तक भी घिरा हुआ है। फिर हम यह इंगित करने के लिए कॉलम (status) जोड़ते हैं कि क्या लाभ/हानि> 1% थी। फिर हम geom_segment(...) ड्राइव करने के लिए इसका उपयोग करते हैं, status द्वारा रंग कोडिंग। scale_color_manual(...) कॉल में, हम रंगों को लाल और हरे रंग में सेट करते हैं, और पौराणिक कथाओं से तटस्थ रंग को बाहर करते हैं। शेष सभी स्वरूपण है।

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