如何从Jupyter Notebook导出无冗余输出的HTML/PDF?
解决Jupyter导出时Matplotlib冗余文本输出的问题
一、代码层面直接屏蔽冗余输出
这是最直接有效的方案——Matplotlib的boxplot、hist等绘图方法会返回对应的图形对象,Jupyter单元格会自动打印未被赋值或未以分号结尾的代码返回值,导致出现你看到的冗余文本。
方法1:在绘图行末尾加分号
修改代码,在每个返回图形对象的语句末尾加上;,抑制自动打印:fig, axs = plt.subplots(2,5, figsize=(20,10)) axs[0,0].hist(pay_data_trim['amount'], bins=15, color = 'b'); axs[0,0].set_ylabel('Frequency', fontsize=14) axs[0,0].set_title('amount', fontsize=14) axs[1,0].boxplot(pay_data_trim['amount']); axs[1,0].set_ylabel('IQR + Outliers', fontsize=14) axs[0,1].hist(pay_data_trim['oldbalanceOrg'], bins=15, color = 'g'); axs[0,1].set_title('oldbalanceOrg', fontsize=14) axs[1,1].boxplot(pay_data_trim['oldbalanceOrg']);方法2:将返回值赋值给无用变量
把绘图方法的返回值赋值给下划线_(约定俗成的无用变量名),避免自动打印:fig, axs = plt.subplots(2,5, figsize=(20,10)) _ = axs[0,0].hist(pay_data_trim['amount'], bins=15, color = 'b') axs[0,0].set_ylabel('Frequency', fontsize=14) axs[0,0].set_title('amount', fontsize=14) _ = axs[1,0].boxplot(pay_data_trim['amount']) axs[1,0].set_ylabel('IQR + Outliers', fontsize=14) _ = axs[0,1].hist(pay_data_trim['oldbalanceOrg'], bins=15, color = 'g') axs[0,1].set_title('oldbalanceOrg', fontsize=14) _ = axs[1,1].boxplot(pay_data_trim['oldbalanceOrg'])
二、VS Code内的导出优化
- 若不想修改代码,可在目标单元格顶部添加
%%capture魔法命令,捕获所有文本输出(注意:该命令会屏蔽单元格内所有文本输出,需谨慎使用):%%capture fig, axs = plt.subplots(2,5, figsize=(20,10)) # 后续绘图代码... - 确保VS Code的Jupyter扩展为最新版本,旧版本可能存在输出处理bug,更新后冗余问题可能自动解决。
三、推荐无冗余输出的导出工具/界面
- Jupyter原生Web界面:通过
jupyter notebook命令启动服务,在浏览器中打开.ipynb文件,导出HTML/PDF时会自动过滤Matplotlib对象文本,仅保留图形。 - nbconvert命令行工具:在终端执行以下命令导出,精准控制输出内容:
# 导出为HTML jupyter nbconvert --to html your_notebook.ipynb # 导出为PDF jupyter nbconvert --to pdf your_notebook.ipynb
内容的提问来源于stack exchange,提问作者Sebastian Quezada
相关产品推荐
相关产品推荐

