You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用quantmod包时无法在循环中绘制chart_Series图形求助

问题描述

刚安装了最新版本的R和RStudio,遇到如下情况:

  • 单独执行chart_Series函数能正常绘图,代码示例:
library(quantmod)
library(xts)

getSymbols('AAPL',src='yahoo')
AAPL <- tail(AAPL,200)

chart_Series(AAPL[sample(1:200,20)])
  • 但在循环里连续调用该函数时,没有报错却只显示空白界面,循环代码:
for(i in 1:10){
  chart_Series(AAPL[sample(1:200,20)]) 
}
  • 对比之下,用常规plot()函数在循环中绘图完全正常,代码示例:
for(i in 1:10){
  plot(rnorm(100)) 
}

会话信息:

> sessionInfo()
R version 4.3.0 (2023-04-21 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

time zone: Asia/Damascus
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] quantmod_0.4.22 TTR_0.24.3      xts_0.13.1      zoo_1.8-12     

loaded via a namespace (and not attached):
[1] compiler_4.3.0 tools_4.3.0    curl_5.0.0     grid_4.3.0    
[5] jsonlite_1.8.4 lattice_0.21-8

解决办法

chart_Series基于grid绘图系统,和基础绘图的plot()逻辑不同——在循环、函数内部这类场景下,它不会自动渲染输出,需要手动触发。

方法1:用print()包裹绘图语句

修改循环代码,让绘图对象被显式打印:

for(i in 1:10){
  print(chart_Series(AAPL[sample(1:200,20)])) 
}

方法2:每次绘图前新建图形设备

如果需要每个图形单独在新窗口显示,可以添加dev.new():

for(i in 1:10){
  dev.new()
  chart_Series(AAPL[sample(1:200,20)]) 
}

原理说明

基础绘图的plot()属于即时渲染系统,执行时直接输出到图形设备;而chart_Series这类基于grid/lattice的函数,会先生成一个绘图对象,只有当这个对象被打印时才会实际渲染。在交互式环境单独执行时,R会自动帮你打印对象,但循环里需要手动调用print()触发。

内容的提问来源于stack exchange,提问作者mr.T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:57:39