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

Plotly子图替换散点图为PNG图片失败,求助解决方法

解决Plotly子图中用PNG图片替换散点图的问题

错误原因

你之前的代码报错,是因为go.Image()不能直接接收px.imshow()返回的Figure对象,也不能直接传入PIL的Image实例——它需要的是符合格式的图像数据(如numpy数组、base64字符串),或者已经构建好的go.Image trace实例。

可行解决方案

方案一:复用px.imshow生成的Image trace

提取px.imshow创建的图像trace,直接添加到子图指定位置,同时移除原有的散点图:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.express as px
from PIL import Image

fig = make_subplots(rows=1, cols=2)

# 添加左侧散点图
fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
    row=1, col=1
)

# 读取图片并生成Image trace
img = Image.open('plot1.png')
img_fig = px.imshow(img)
# 提取Image trace添加到子图第二列
fig.add_trace(img_fig.data[0], row=1, col=2)

# 更新布局
fig.update_layout(height=600, width=800, title_text="Side By Side Subplots")
# 可选:隐藏第二列坐标轴,让图片完全填充子图
fig.update_xaxes(visible=False, row=1, col=2)
fig.update_yaxes(visible=False, row=1, col=2)

fig.show()

方案二:直接用go.Image加载图片(无需PIL)

使用Plotly内置的plotly.io.read_image读取图片为numpy数组,直接传入go.Image:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.io as pio

fig = make_subplots(rows=1, cols=2)

# 添加左侧散点图
fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[4, 5, 6]),
    row=1, col=1
)

# 读取图片为numpy数组,创建Image trace
img_array = pio.read_image("plot1.png")
fig.add_trace(go.Image(z=img_array), row=1, col=2)

# 更新布局并隐藏第二列坐标轴
fig.update_layout(height=600, width=800, title_text="Side By Side Subplots")
fig.update_xaxes(visible=False, row=1, col=2)
fig.update_yaxes(visible=False, row=1, col=2)

fig.show()

注意事项

  • 务必删除原代码中第二列的散点图代码,避免图片与散点图重叠
  • 隐藏坐标轴可以让图片完全填充子图区域,若需要保留坐标轴可跳过update_xaxes/update_yaxes的隐藏操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:40:20