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
相关产品推荐
相关产品推荐

