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

R语言绘制股票收益图时图例不显示问题求助

解决quantmod绘图时图例不显示的问题

我之前也遇到过一模一样的问题!quantmod基于xts对象的绘图系统和R基础绘图的legend()函数兼容性不太好,主要是因为plot.xts会自定义绘图区域的坐标规则,导致基础legend()找不到正确的位置渲染。下面针对你两种绘图方式分别给出解决方案:

方案1:针对多列xts对象的单屏绘图

你第一个代码里用plot(x=portfolio, screens=1)直接绘制多列xts,这时候别用基础的legend(),改用quantmod自带的addLegend()函数,它能完美适配xts的绘图环境:

library(quantmod)
library(TTR)
tckrs<-c("GOOG","FB")
getSymbols(tckrs,from="2019-01-01")
AdG<-Ad(GOOG)
AdF<-Ad(FB)
DrG<-dailyReturn(AdG)[-1,]
DrF<-dailyReturn(AdF)[-1,]
portfolio<-cbind(DrG,DrF)
colnames(portfolio)
names(portfolio)[1]<="DrG"
names(portfolio)[2]<="DrF"
tsRainbow<-rainbow(ncol(portfolio))
plot(x=portfolio,ylab="Return",main="Portfolio Returns (Single)",col=tsRainbow,screens=1)
# 替换原legend为addLegend
addLegend("bottom", legend.names = c("GOOG","FB"), lty=1, col=tsRainbow, on=1)

这里的on=1指定图例添加到第1个屏幕(你这里只有一个屏幕,也可以省略,但加上更稳妥)。

方案2:先绘制单个xts再用lines叠加

你第二个代码里先画DrG再叠加DrF,这时候有两种解决方式:

方式A:继续用基础legend,但调整inset参数

基础legend()的字符串位置(比如"bottom")在xts绘图里可能被坐标轴遮挡,调整inset参数让它稍微上移一点:

myColors<-c("red","darkgreen")
plot(x=portfolio[,"DrG"],xlab="Time",ylab="Stock Returns",main="Stock Returns",ylim=c(-0.15,0.1),major.ticks= "years",minor.ticks=FALSE,col="red")
lines(x=portfolio[,"DrF"],col="darkgreen")
legend(x="bottom",legend=c("DrG","DrF"),lty=1,col=myColors, inset=c(0, 0.02))

方式B:用quantmod的addLegend更省心

直接调用addLegend(),它会自动识别当前的xts绘图区域:

myColors<-c("red","darkgreen")
plot(x=portfolio[,"DrG"],xlab="Time",ylab="Stock Returns",main="Stock Returns",ylim=c(-0.15,0.1),major.ticks= "years",minor.ticks=FALSE,col="red")
lines(x=portfolio[,"DrF"],col="darkgreen")
addLegend("bottom", legend.names = c("DrG","DrF"), lty=1, col=myColors)

为什么原代码的legend不显示?

核心原因是plot.xts(quantmod绘图的底层函数)会重新设置绘图的坐标系统和边距,基础legend()函数的位置计算是基于标准基础绘图的坐标,和xts的绘图区域不匹配,导致图例被绘制到了可见区域之外,所以你看不到它。而addLegend()是quantmod专门为xts绘图开发的,会自动适配这些自定义的绘图参数,所以能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:02:44