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

如何避免Plotly导出PDF时减少折线的采样点数?

Plotly导出矢量图(PDF/SVG/EPS)时折线出现“点状”效果的原因与解决办法

原因:这是Plotly的默认降采样特性

Plotly在导出PDF、SVG、EPS这类矢量格式时,会自动对包含大量数据点的折线进行降采样处理——通过减少写入文件的点数来控制矢量文件体积。这是官方设计的特性,而非Bug:矢量图的每个点都会作为独立元素存储,高密度数据会导致文件体积暴涨,降采样是平衡显示效果和文件大小的策略。而PNG是位图格式,渲染时会绘制所有数据点,所以不会出现点状效果。

解决办法

1. 关闭降采样(推荐)

在write_image方法中添加downsample=None参数,强制保留所有数据点:

fig.write_image("cos.pdf", downsample=None)

该参数适用于Plotly默认的Kaleido渲染引擎,能直接让折线恢复平滑,同时如果原始数据点数合理(比如10000点的PDF体积仍在可接受范围),不会对LaTeX编译造成影响。

2. 自定义降采样密度

如果担心全量数据导致文件过大,可以通过downsample参数设置采样间隔。例如设置downsample=2表示每2个点保留1个,兼顾平滑度和体积:

fig.write_image("cos.pdf", downsample=2)

3. 调整原始数据点数

如果降采样参数无法生效,也可以直接减少生成数据时的点数。比如将np.linspace(0,10,10000)改为np.linspace(0,10,2000),2000个点的折线在矢量图中已经足够平滑,同时能大幅降低文件体积。

4. 标记点模拟折线(不推荐)

这是你提到的临时方案:将折线改为极小标记点,同时调整图例显示。但该方法会显著增加文件体积,且图例样式需要额外调整,仅作为备选:

fig.add_trace(go.Scatter(
    x=xvalues,
    y=np.cos(xvalues),
    name="cos(x) line",
    mode='markers',
    marker=dict(size=1),
    # 强制图例显示为折线
    legendwidth=10,
    legendgroup="cos"
))

适配LaTeX的建议

优先选择PDF格式插入LaTeX,关闭降采样后若文件体积过大,可适当减少原始数据点数(1000-3000点足够满足学术图表的平滑要求)。SVG格式也可直接插入,但部分LaTeX环境可能需要额外包支持(如svg包)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:28:21