2013-10-11 5 views
8

में एकाधिक सीधी रेखाएं जोड़ने के लिए कैसे मेरे पास एकाधिक समय श्रृंखला डेटा प्लॉट हैं और मुझे प्रत्येक साजिश में एक क्षैतिज रेखा की आवश्यकता है, लेकिन विभिन्न क्षैतिज मानों (एस। 1 प्लॉट: h=50, दूसरी साजिश: h=48 .. ।)।एक बहु plot.zoo

मैंने abline(h=50... की कोशिश की और मुझे प्रत्येक साजिश में क्षैतिज रेखा मिल गई। मैंने abline(h=c(50,48... की कोशिश की और मुझे प्रत्येक साजिश में बहुपक्षीय क्षैतिज रेखाएं मिलती हैं।

मैं दूसरी साजिश में h=48 की दूसरी साजिश में h=50 प्लॉट करने के लिए plot.zoo अनुक्रमणिका कैसे प्राप्त कर सकता हूं, इस बारे में पता नहीं लगा सकता।

library(xts) 
data(sample_matrix) 
x <- as.xts(sample_matrix) 

# plot with single line 
my.panel <- function(x, ...) { 
    lines(x, ...) 
    abline(h=50, col = "red", lty="solid", lwd=1.5) 
} 
plot.zoo(x, main="title", 
plot.type="multiple", type="o", lwd=1.5, col="blue", 
panel=my.panel) 


# plot multiple lines in all plots 
my.panel <- function(x, ...) { 
    lines(x, ...) 
    abline(h=c(50,50,48,50), col = "red", lty="solid", lwd=1.5)} 

plot.zoo(x, main="title", 
plot.type="multiple", type="o", lwd=1.5, col="blue", 
panel=my.panel) 

उत्तर

6

एक multipanel साजिश में एक पैनल को अनुकूलित करने के अच्छी तरह से वास्तविक ?plot.zoo पाठ में वर्णित नहीं है। 'विवरण' अनुभाग में आप पाते हैं:
"कस्टम पैनल के मामले में panel यह निर्धारित करने के लिए parent.frame$panel.number का संदर्भ दे सकता है कि पैनल किस फ्रेम से कॉल किया जा रहा है। उदाहरण देखें।" और कुछ उदाहरण हैं। उन्हें टेम्पलेट के रूप में उपयोग करते हुए, मैंने पाया कि यह अलग पैनलों को कॉल करने का एक तरीका हो सकता है, और प्रत्येक में अलग hline खींच सकता है।
अद्यतन। @ जी के लिए धन्यवाद। ग्रोथेंडिक ने एक संपादन के लिए कोड बहुत क्लीनर बनाया है!

# create values for hline, one for each panel 
hlines <- c(50, 50, 48, 50) 

# panel function that loops over panels 
my.panel <- function(x, ...) { 
    lines(x, ...) 
    panel.number <- parent.frame()$panel.number 
    abline(h = hlines[panel.number], col = "red", lty = "solid", lwd = 1.5) 
} 

plot.zoo(x, main = "title", type = "o", lwd = 1.5, col = "blue", panel = my.panel) 

enter image description here

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