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

如何在R与ESS中同时或分窗口显示4个quantmod的lineChart?

如何在R/ESS中同时显示多个quantmod lineChart图表

首先明确说:这不是ESS的特性——不管是在普通R控制台还是ESS里,quantmod的lineChart默认都会覆盖当前的绘图输出,所以你只会看到最后一个图表。这是因为lineChart基于lattice绘图系统,每次调用都会替换当前设备的内容,和编辑器环境无关。

下面给你两种实用的解决方案:

方案1:每次绘图前新建独立窗口

通过dev.new()函数在每个lineChart前创建一个新的绘图窗口,这样每个图表都会在单独窗口显示,不会被覆盖:

library(quantmod)
getSymbols("XPT/USD",src="oanda")
getSymbols("XAU/USD",src="oanda")

# 新建窗口绘制3月黄金图表
dev.new()
lineChart(XAUUSD, subset='2018-03::2018-03')

# 新建窗口绘制4月黄金图表
dev.new()
lineChart(XAUUSD, subset='2018-04::2018-04')

# 新建窗口绘制3月铂金图表
dev.new()
lineChart(XPTUSD, subset='2018-03::2018-03')

# 新建窗口绘制4月铂金图表
dev.new()
lineChart(XPTUSD, subset='2018-04::2018-04')

在ESS中,这个方法完全生效——新窗口会正常弹出,你可以切换查看每个图表。如果你的ESS设置了使用内置绘图缓冲区,可能需要先把ess-use-plot-buffer设为nil(在Emacs配置里调整),这样会强制使用外部窗口。

方案2:在同一个窗口排列多个图表

如果你不想开多个窗口,可以把所有图表放在同一个窗口的网格布局里,需要用到gridExtra包:

library(quantmod)
library(gridExtra)

getSymbols("XPT/USD",src="oanda")
getSymbols("XAU/USD",src="oanda")

# 将每个图表保存为对象(plot=FALSE不直接绘制)
gold_mar <- lineChart(XAUUSD, subset='2018-03::2018-03', plot = FALSE)
gold_apr <- lineChart(XAUUSD, subset='2018-04::2018-04', plot = FALSE)
platinum_mar <- lineChart(XPTUSD, subset='2018-03::2018-03', plot = FALSE)
platinum_apr <- lineChart(XPTUSD, subset='2018-04::2018-04', plot = FALSE)

# 2x2网格排列所有图表
grid.arrange(gold_mar, gold_apr, platinum_mar, platinum_apr, ncol = 2)

这种方式会在一个窗口里整齐显示四个图表,不管是ESS还是普通R环境都适用,非常适合对比查看数据。

总结一下:问题的核心是quantmod绘图函数的默认行为,和ESS无关,用上面两种方法就能轻松解决多图表显示的需求。

内容的提问来源于stack exchange,提问作者Bor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:51:48