如何在R语言Quantmod的chartSeries图表上添加标记点?
在chartSeries图表上标记点的正确方法
问题原因
chartSeries 是quantmod包基于grid绘图系统实现的绘图函数,而base R的points()属于base绘图系统,两者不兼容,所以直接调用points()无法在chartSeries生成的图上显示点。
解决方案
以下是几种可行的实现方法:
方法1:使用quantmod原生的addSymbols()函数
这是最贴合chartSeries工作流的方式,直接在技术指标参数(TA)中添加标记点:
library(quantmod) # 获取AAPL数据 symb <- getSymbols("AAPL", from = "2024-02-01", src = 'yahoo', auto.assign = FALSE) # 绘制图表并添加标记点 chartSeries(symb, theme = chartTheme("white", dn.col = "red"), TA = list( "addEMA(5)", "addEMA(20)", # 自定义标记点的形状、颜色、大小 "addSymbols(x = as.Date('2024-05-20'), y = 180, pch = 17, col = 'darkblue', cex = 1.5)" ) )
方法2:切换到新版chart_Series() + addPoints()
quantmod官方现在更推荐使用带下划线的chart_Series(),它支持更直观的addPoints()函数:
library(quantmod) symb <- getSymbols("AAPL", from = "2024-02-01", src = 'yahoo', auto.assign = FALSE) # 使用新版绘图函数 chart_Series(symb, theme = chartTheme("white", dn.col = "red")) addEMA(5) addEMA(20) # 添加目标标记点 addPoints(x = as.Date('2024-05-20'), y = 180, pch = 17, col = "darkred", cex = 1.2)
方法3:手动转换坐标用grid包自定义绘图
如果需要更精细的控制,可以通过坐标映射转换后,用grid包的函数绘制:
library(quantmod) library(grid) symb <- getSymbols("AAPL", from = "2024-02-01", src = 'yahoo', auto.assign = FALSE) chartSeries(symb, theme = chartTheme("white", dn.col = "red"), TA = list("addEMA(5)","addEMA(20)") ) # 获取图表的坐标映射关系 coords <- xy.coords(index(symb), symb[, "AAPL.Close"]) # 定位目标日期的x轴位置 x_pos <- which(index(symb) == as.Date("2024-05-20")) # 转换为grid系统的坐标单位 grid_x <- unit(coords$x[x_pos], "native") grid_y <- unit(180, "native") # 绘制自定义点 grid.points(grid_x, grid_y, pch = 17, gp = gpar(col = "darkgreen", cex = 1.5))
补充说明
- 优先推荐方法1或方法2,无需手动处理坐标,更符合quantmod的设计逻辑。
- 可以通过调整
pch(点形状)、col(颜色)、cex(大小)参数,匹配你想要的标记效果。
内容的提问来源于stack exchange,提问作者GX001
相关产品推荐
相关产品推荐

