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

如何让Jupyter中%matplotlib widget绘图支持下载SVG等矢量格式?

解决方案

%matplotlib widget 使用的是 ipympl 后端,默认仅提供PNG格式一键导出,没有桌面端的格式选择弹窗,可通过以下方法实现SVG等矢量格式导出:

方法1:单图指定导出格式

适合仅需要修改当前图像导出格式的场景,要求 ipympl 版本≥0.7,仅需在显示画布前新增一行配置即可。
修改后的完整代码如下:

import IPython.display
from IPython.display import display
from ipywidgets import widgets, Layout

%matplotlib widget
import matplotlib as mpl
import matplotlib.pyplot as plt

widget_out = widgets.Output(layout=Layout(width='100%'))

with widget_out:
    widget_out.clear_output(wait=True)
    plt.ioff() 
    fig = plt.figure(figsize=(10,1), dpi=90)
    ax = fig.add_subplot(111)
    ax.plot([0,1,2], [0,1,2])
    plt.ion()
    # 新增该行修改下载格式为svg,可替换为pdf、eps等matplotlib支持的格式
    fig.canvas.toolbar.download_format = 'svg'
    display(fig.canvas)

myvbox = widgets.VBox([
    widget_out,
],)
display(myvbox)

修改完成后点击原有「Download plot」按钮,即可直接下载SVG格式的矢量图。

如果运行报错说明ipympl版本过低,可先执行命令升级:
pip install --upgrade ipympl

方法2:全局设置默认导出格式

如果希望所有%matplotlib widget生成的图像默认都导出SVG格式,可在代码开头导入matplotlib后添加全局配置:

plt.rcParams['savefig.format'] = 'svg'

方法3:自定义多格式导出组件

如果需要灵活切换导出格式,可额外添加ipywidgets组件实现格式选择后导出,示例代码如下:

# 格式选择下拉框
format_selector = widgets.Dropdown(
    options=['png', 'svg', 'pdf', 'eps'],
    value='svg',
    description='导出格式:',
)
# 导出按钮
export_btn = widgets.Button(description='导出图像', button_style='success')

def on_export_click(b):
    import io
    buf = io.BytesIO()
    fig.savefig(buf, format=format_selector.value, bbox_inches='tight')
    buf.seek(0)
    # 生成下载组件
    download = widgets.Download(
        data=buf.getvalue(),
        filename=f'plot.{format_selector.value}'
    )
    download.click()

export_btn.on_click(on_export_click)
# 将自定义组件加入布局
myvbox = widgets.VBox([widgets.HBox([format_selector, export_btn]), widget_out])
display(myvbox)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:54:03