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

如何在图像上叠加绘图?预测图叠加图片的代码问题求助

在图像上叠加绘图的方法&你的代码问题修复

嘿,我来帮你搞定这两个问题:先讲通用的图像叠加绘图方法,再帮你修正代码里的错误~

一、通用方法:在图像上叠加绘图

要实现图像和绘图元素的叠加,核心是让两者共享同一套坐标系统,步骤大概是这样:

    1. 先读取目标图像(比如用jpeg包的readJPEG,如果是PNG就用png包的readPNG)
    1. 创建绘图区域:要么先画好基础图(比如你的预测图),要么手动设置匹配数据范围的坐标
    1. 用rasterImage()把图像放到绘图区,指定好对应的坐标位置(比如覆盖整个区域,或者放在角落)
    1. 叠加绘图元素(线条、点、文本等),确保这些元素的坐标和图像所在的坐标系统一致

二、你的代码问题修复

看了你的代码,有几个明显的小问题导致无法正常运行,我帮你逐一修正:

问题1:函数名写错了

R里绘制线条的函数是lines(),不是line()——这是最直接的语法错误。

问题2:坐标获取时机不对

你在plot.new()之后调用par()拿usr坐标,但plot.new()创建的是空绘图区,默认坐标是c(0,1,0,1),这会导致你的图像和预测线的坐标完全不匹配。应该先绘制预测图,再去获取当前的绘图坐标。

问题3:forecast对象的绘图方式不对

直接用lines()去画fit.forecast这个forecast类对象是没用的,得提取里面的具体数据(比如预测均值fit.forecast$mean)来绘制。

下面是两种修正后的方案,对应你不同的需求:

方案1:在预测图上叠加图片(符合你说的“在预测图上叠加一张图片”)

library(quantmod)
library(forecast)  # 别漏了加载这个包,auto.arima和forecast都依赖它
library(jpeg)

# 获取股票数据并生成预测
Stock_df <- as.data.frame(getSymbols(Symbols = "AAPL", src = "yahoo", from = "2017-05-06", env = NULL))
fit <- auto.arima(Stock_df$AAPL.Close, ic="bic")
fit.forecast <- forecast(fit)

# 读取图片(确保图片在当前工作目录,或者用完整路径)
my_image <- readJPEG("Myimage.jpg")

# 先绘制预测图作为基础
plot(fit.forecast, main = "AAPL Forecast with Overlaid Image")

# 获取当前绘图区的坐标范围
lim <- par("usr")

# 设置图片的位置(这里放在右上角,你可以自己调整坐标)
# 比如让图片占据x轴右侧1/5,y轴上方1/3的区域
img_x_start <- lim[2] - (lim[2] - lim[1])/5
img_x_end <- lim[2]
img_y_start <- lim[4] - (lim[4] - lim[3])/3
img_y_end <- lim[4]

# 叠加图片
rasterImage(my_image, img_x_start, img_y_start, img_x_end, img_y_end)

方案2:在图片背景上叠加预测线

如果你是想把预测线画在图片上面,那可以这么写:

library(quantmod)
library(forecast)
library(jpeg)

Stock_df <- as.data.frame(getSymbols(Symbols = "AAPL", src = "yahoo", from = "2017-05-06", env = NULL))
fit <- auto.arima(Stock_df$AAPL.Close, ic="bic")
fit.forecast <- forecast(fit)

my_image <- readJPEG("Myimage.jpg")

# 创建匹配股票数据的绘图区(先不画内容,只搭框架)
plot(Stock_df$AAPL.Close, type = "n", main = "AAPL Forecast on Image Background")

# 获取坐标,把图片铺满整个绘图区当背景
lim <- par("usr")
rasterImage(my_image, lim[1], lim[3], lim[2], lim[4])

# 叠加原始收盘价和预测线
lines(Stock_df$AAPL.Close, col = "darkblue", lwd = 2)
lines(fit.forecast$mean, col = "firebrick", lwd = 2, lty = 2)
# 可选:添加95%预测区间
lines(fit.forecast$lower[,2], col = "firebrick", lty = 3)
lines(fit.forecast$upper[,2], col = "firebrick", lty = 3)

小提示

  • 如果你不知道怎么调整图片位置,可以用locator(1)函数,运行后点击绘图区的某个位置,R会返回该点的坐标,直接拿来用就行
  • 检查图片路径是否正确:可以用getwd()查看当前工作目录,把图片放到这个目录里,或者用完整路径比如readJPEG("C:/Users/xxx/Myimage.jpg")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:26