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

在Jupyter中使用Seaborn Objects绘制子图时出现重复绘图问题

Jupyter中Seaborn Objects子图重复显示的原因

问题场景

在Jupyter环境中运行以下代码绘制子图时,未添加plt.show()会出现两幅完全相同的绘图:

import matplotlib.pyplot as plt
import seaborn as sns
import seaborn.objects as so

diamonds = sns.load_dataset("diamonds")

f, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(6, 3))

p = so.Plot(diamonds, x="carat", y="price")
p.add(so.Dots()).scale(y="log").on(ax1).plot()
p.add(so.Dots(), color="clarity").scale(color="crest").on(ax2).plot()
# plt.show()  # 注释该行时出现重复绘图

未添加plt.show()时的输出:
重复绘图的输出截图

原因解析

  1. Jupyter的自动渲染机制:Jupyter Notebook/Lab会自动显示单元格最后一个表达式的返回值。Seaborn Objects的.plot()方法执行时,不仅会把图形绘制到指定的ax1/ax2轴上,还会返回包含当前图形的对象。当最后一行.plot()的返回值未被接收(比如用变量赋值),Jupyter会自动渲染这个返回的图形。
  2. Matplotlib后端的自动显示:同时,plt.subplots()创建的Figure对象(变量f)会被Matplotlib的inline后端自动检测并显示,这就导致同一图形被两次渲染,出现重复。

解决办法

  • 添加plt.show():plt.show()会显式渲染当前画布,且执行后返回None,Jupyter不会对None进行渲染,因此只会显示一次图形。
  • 接收.plot()的返回值:把最后一行的.plot()赋值给一个变量(比如_ = p.add(...).plot()),避免Jupyter自动渲染返回的图形对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:22:07