Python如何在同一输出结果中展示多张绘图(Jupyter适用)
实现方案
方案1:基于Matplotlib子图容器生成组合图(排版灵活度最高)
你可以直接创建带多子区域的画布对象,将子图轴传入绘图函数,两张图绘制完成后会统一输出到同一个结果块,示例代码如下:
import matplotlib.pyplot as plt import numpy as np # 模拟你现有的两个绘图函数 def draw_line(ax): x = np.linspace(0, 2*np.pi, 200) ax.plot(x, np.sin(x), c='blue') ax.set_title("折线图") def draw_scatter(ax): x = np.random.rand(100) y = np.random.rand(100) ax.scatter(x, y, c='red', alpha=0.6) ax.set_title("散点图") # 创建1行2列的画布布局,可自行调整行列数、画布尺寸 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 传入子图轴对象完成绘制 draw_line(ax1) draw_scatter(ax2) # 自动调整子图间距避免标题遮挡 plt.tight_layout() plt.show()
如果你的绘图函数已经封装完成不方便修改传入参数,可以用下面的方案2。
方案2:同Cell内依次调用绘图函数(零代码修改成本)
Jupyter默认会把同一个代码Cell内的所有绘图结果合并到同一个输出块中,你只需要在同一个Cell里按顺序调用两个绘图函数即可,不需要修改原有函数逻辑:
# 你的原有绘图函数,无需任何修改 def your_plot_func1(): plt.plot([1,3,5,7], [2,5,3,8]) plt.show() def your_plot_func2(): plt.bar(["A","B","C","D"], [4,2,7,5], color='orange') plt.show() # 同Cell内依次调用 your_plot_func1() your_plot_func2()
注意:如果调用后看不到两张图,检查函数内部是否存在plt.close()这类主动关闭画布的语句,删除即可正常输出
方案3:自定义HTML布局实现并排展示
如果需要调整两张图的排布样式(比如并排、设置间距等),可以将绘图转成base64后拼接HTML实现自定义布局:
from IPython.display import HTML import base64 from io import BytesIO # 绘图转base64工具函数 def fig_to_img(fig): buf = BytesIO() fig.savefig(buf, format='png', bbox_inches='tight') buf.seek(0) return base64.b64encode(buf.read()).decode('utf-8') # 生成两张图 fig1 = plt.figure() plt.plot([1,2,3,4], [10,20,15,25]) plt.close(fig1) img1 = fig_to_img(fig1) fig2 = plt.figure() plt.pie([30,20,50], labels=["类1","类2","类3"]) plt.close(fig2) img2 = fig_to_img(fig2) # 渲染并排布局 HTML(f''' <div style="display:flex;gap:20px;align-items:center;"> <img src="data:image/png;base64,{img1}" style="width:48%"> <img src="data:image/png;base64,{img2}" style="width:48%"> </div> ''')
内容的提问来源于stack exchange,提问作者Ahmed Abozaid
相关产品推荐
相关产品推荐

