R 为什么 plot.xts 在调用线后创建额外的图形?

标签 r plot time-series xts quantmod

考虑以下两个图,第一个使用通用绘图函数,第二个使用 plot.xts:

一般情节

par(mfrow = c(2,1))
plot(1:5, type="l", main = "generic plot")
lines(5:1)

正如预期的那样,lines 函数添加到现有图形中,因此它产生单个图形

enter image description here

我已设置 mfrow = c(2,1) 来向您展示,只有一个图表。 现在使用 xts 数据:

par(mfrow = c(2,1))
plot(xts(x = 1:5, order.by = 1:5+as.Date("2017-01-01")), type="l", main = "plot.xts")
lines(xts(x = 5:1, order.by = 1:5+as.Date("2017-01-01")), main = "plot.xts")

enter image description here

出乎意料的是它产生了两个图表。为什么?

我的具体情况有点复杂,但我发现这段代码是重现我的问题的最简单方法。基本上我想在一个图上继续添加 xts 数据。我能够使用通用的 plot 和 lines 函数来实现这一点。

平台信息: R 版本 3.4.3 (2017-11-30) 平台:x86_64-apple-darwin15.6.0(64 位) 运行于:macOS High Sierra 10.13.2 quantmod_0.4-12 xts_0.10-1

最佳答案

xts 绘图函数实际上并不像基本绘图函数那样工作,尽管它们的调用看起来是一样的。

plot.xts 函数返回一个对象。默认情况下,如果您不在任何地方分配对象,R 将“打印”导致绘制绘图的对象。 lines.xts 函数更改了最近的绘图对象并添加了一个新系列。由于未保存绘图,因此也会打印该新对象。这个新对象会记住第一个系列以及新添加的系列。

最好的办法是保存这些对象,只在添加完图层后打印它们。例如

par(mfrow = c(2,1))
pp <- plot(xts(x = 1:5, order.by = 1:5+as.Date("2017-01-01")), type="l", main = "plot.xts")
pp <- lines(xts(x = 5:1, order.by = 1:5+as.Date("2017-01-01")), main = "plot.xts")
pp #plot will be drawn here

关于R 为什么 plot.xts 在调用线后创建额外的图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445963/

相关文章:

r - 按多个分隔符拆分列,保留分隔符

r - 根据echarts4r中的变量添加彩色点

linux - 如何防止 MATLAB 打印空格和使用错误的字体?

python - 我应该在 Pandas 中使用什么扩展名来检测 .Route 文件?

r - 如何更改corrplot中相关系数的字体大小?

r - 使用 tidyverse 和 mutate_all 对每一列应用相同的函数

r - 使用 ggplot2 如何在绘制线条后用 aes() 绘制点?

pandas - 从 pandas 的日期中提取周列

使用 as.POSIXlt/ct 进行 R 预测

python - 使用 Python 训练 arima 模型时如何解决 LinAlgError 和 ValueError