我正在尝试将 6 天的盘中数据绘制为 6 张图表。 Quantmod 的实验 chart_Series() 函数适用于 par() 设置。我已将数据预加载到 bars
(XTS 对象的向量)所以我的代码如下所示:
par(mfrow=c(3,2)) #3 rows, 2 columns
for(d in bars){
print(chart_Series(d, type = "candlesticks") )
}
这可行,但每个图表都有自己不同的 y 轴刻度。我想设置一个涵盖所有 6 天的 y 范围,但找不到这样做的方法。我试过这个:
ylim=c(18000,20000)
print(chart_Series(d, type = "candlesticks",ylim=ylim) )
但它因“未使用的参数”错误而失败。 yrange=ylim 也失败了。
我可以使用 chartSeries(d,yrange=ylim),它可以工作。但据我所知,我不能将多个图表放在一个显示中(?)。
(它可能严格来说是偏离主题的,但是对于可以绘制漂亮烛台图表、允许 y 轴控制并且可以在一张图像上绘制多个图表的替代 R 包的建议也将非常受欢迎。)
最佳答案
与 chartSeries
,可以设置layout
NULL
的参数防止layout()
命令被调用:这是禁用 mfrow
的原因环境。
library(quantmod)
getSymbols("AA")
op <- par(mfrow=c(3,2))
for(i in 1:6) {
chartSeries(
AA["2011-01"], "candlesticks",
TA=NULL, # No volume plot
layout=NULL,
yrange=c(15,18)
)
}
par(op)
如果想保持音量,可以调用
layout
而不是设置 mfrow
:它基本上做同样的事情,但允许你有不同大小的图并选择它们的绘制顺序。layout( matrix( c(
1, 3,
2, 4,
5, 7,
6, 8,
9, 11,
10, 12
), nc=2, byrow=TRUE),
heights = rep( c(2,1), 3 )
)
#layout.show(12) # To check that the order is as desired
for(i in 1:6) {
chartSeries(
AA[sprintf("2011-%02d",i)],
"candlesticks", layout=NULL, yrange=c(15,19)
)
}
关于R/quantmod : multiple charts all using the same y-axis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815697/