我有多个时间序列数据图,每个图中都需要一条水平线,但是水平值不同(例如,第一个图:h=50
,第二个图:h=48
...)。
我尝试了abline(h=50...
,并在每个图中获得了水平线。
我尝试了abline(h=c(50,48...
,并在每个图中获得了多条水平线。
我不知道如何获得plot.zoo索引,以便在第一个图中绘制h=50
,在第二个图中绘制h=48
,依此类推。
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)
最佳答案
在实际的?plot.zoo
文本中没有全面介绍如何自定义多面板图中的单个面板。在“详细信息”部分中,您可以找到:
“在定制面板的情况下,panel
可以引用parent.frame$panel.number
来确定从哪个面板调用面板。请参见示例。”并且有很多示例。使用它们作为模板,我发现这可能是调用单独的面板并在每个面板中绘制单独的hline
的一种方式。
更新。感谢@G。 Grothendieck进行了使代码更简洁的编辑!
# 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)
关于r - 如何在多绘图中添加多条直线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19314571/