我有一个xts / zoo对象ESZ1:
> class(ESZ1)
[1] "xts" "zoo"
带
> class(time(ESZ1))
[1] "POSIXt" "POSIXct"
和
> colnames(ESZ1)
[1] "ESZ1.Open" "ESZ1.High" "ESZ1.Low" "ESZ1.Close" "ESZ1.Volume" "ESZ1.WAP" "ESZ1.hasGaps" "ESZ1.Count"
我想使用包quantmod中的chartSeries函数绘制它。但是,我收到以下错误:
> chartSeries(ESZ1)
Error in if (on == "years") { : missing value where TRUE/FALSE needed
任何关于问题可能出现的想法都将受到高度赞赏。
其他问题: 有没有关于如何调整chartSeries()的轴/边距的文档?目前我的y轴标签在图的右边缘部分被切除。我尝试过使用
mar = ...
在chartSeries的参数列表中,但这并未改变结果图。
答案 0 :(得分:3)
问题出在chartSeries中,特别是axTicksByTime调用。我将添加一个补丁来解决这个问题,但现在你可以这样做:
chartSeries(ESZ1, major.ticks="minutes")
默认情况下 major.ticks =“auto”并且在自动程序中似乎太早失败才能得到正确答案。
答案 1 :(得分:2)
您没有提供有关ESZ1
对象的足够信息,但我可以通过尝试绘制2分钟或更短的数据来重现错误。你的专栏名称看起来像IBrokers,所以......
> library(IBrokers)
> library(quantmod)
> ibg <- ibgConnect()
> fut <- twsFUT('ES', 'GLOBEX', '201112')
> ESZ1 <- reqHistoricalData(ibg, fut, barSize='1 secs', duration='120 S')
TWS Message: 2 -1 2104 Market data farm connection is OK:usfuture
TWS Message: 2 -1 2106 HMDS data farm connection is OK:ushmds2a
waiting for TWS reply on ES .... done.
> chartSeries(ESZ1)
Error in if (on == "years") { : missing value where TRUE/FALSE needed
如果您使用超过2分钟的数据,则可以正常工作。
> ESZ1 <- reqHistoricalData(ibg, fut, barSize='1 secs', duration='121 S')
waiting for TWS reply on ES .... done.
> chartSeries(ESZ1)
> indexClass(ESZ1)
[1] "POSIXct" "POSIXt"
> colnames(ESZ1)
[1] "ESZ1.Open" "ESZ1.High" "ESZ1.Low" "ESZ1.Close" "ESZ1.Volume"
[6] "ESZ1.WAP" "ESZ1.hasGaps" "ESZ1.Count"