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

关于Notebook推迟绘图至下一单元格及代码组织的技术问询

嘿,这方案完全贴合你的需求!咱们直接用Matplotlib的默认上下文特性就能实现,不用纠结已经废弃的plt.hold了,具体这么做👇

核心思路

利用Matplotlib在Notebook中默认的绘图状态保留机制:只要不手动关闭画布(Figure),所有后续的绘图命令都会作用在同一个画布上。这样就能把核心绘图逻辑和细节美化拆到两个单元格,配合隐藏输入的扩展工具,完美适配你的幻灯片/PDF生成需求。


第一个单元格(核心意图,需隐藏输入)

这里只放最核心的绘图代码,不添加任何细节也不显示图像——读者在幻灯片/PDF里看不到这部分,但查看原始Notebook时能看到背后的逻辑:

import numpy as np
import matplotlib.pyplot as plt

# 定义数据与核心函数
t = np.linspace(0, 2*np.pi, 100)
def f(t):
    return np.sin(t)

# 仅执行核心绘图操作,无输出
plt.plot(t, f(t))

第二个单元格(细节美化与显示,需显示输入)

这里补充所有绘图细节,最后调用plt.show()显示完整图像——这部分是读者在幻灯片/PDF里会看到的内容:

# 添加各类细节标注
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.title('Sine Wave')
plt.grid(True)
plt.ylim(-1.2, 1.2)

# 显示最终完整图像
plt.show()

进阶优化(更可控的对象式写法)

如果担心多个单元格之间的画布冲突,推荐用对象式绘图显式创建画布和坐标轴,逻辑更清晰:

第一个单元格(隐藏输入)

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 2*np.pi, 100)
def f(t):
    return np.sin(t)

# 显式创建画布和坐标轴,后续操作都绑定到这个坐标轴上
fig, ax = plt.subplots()
ax.plot(t, f(t))

第二个单元格(显示输入)

# 通过坐标轴对象添加细节
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude')
ax.set_title('Sine Wave')
ax.grid(True)
ax.set_ylim(-1.2, 1.2)

plt.show()

适配你的幻灯片/PDF需求

用Notebook的隐藏输入扩展工具(比如Jupyter Notebook的Hide Input插件、JupyterLab的相关扩展)把第一个单元格的输入隐藏,生成幻灯片或PDF时,读者只会看到第二个单元格的代码和最终图像;而想要了解背后逻辑的人,查看原始Notebook就能看到完整的代码拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:43:13