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

Plotly导出含Sankey图与柱状图的子图静态图片布局错乱求助

解决建议

1. 显式定义子图布局边距与尺寸

直接在layout里设置全局和子图的边距,避免导出时元素被挤压:

# Plotly Python示例代码
fig.update_layout(
    width=1200,  # 导出图片的固定宽度
    height=800,  # 导出图片的固定高度
    margin=dict(l=100, r=50, t=80, b=80),  # 全局边距,给Sankey图标签留足空间
)
# 针对子图单独调整(如果用make_subplots创建)
fig.update_xaxes(margin=dict(l=20), row=1, col=1)
fig.update_yaxes(margin=dict(b=20), row=2, col=1)

Sankey图的标签很容易超出边界,单独给包含Sankey的子图加大左右边距,确保标签完全显示。

2. 锁定子图比例与关闭自动缩放

关闭自动适配,强制导出时使用固定的子图比例,防止Plotly自动压缩布局:

fig.update_layout(
    autosize=False,  # 关闭自动适配,使用自定义尺寸
    uniformtext_minsize=10,  # 设置文本最小尺寸,避免标签被压缩成小点
    uniformtext_mode='hide'  # 超出边界的文本直接隐藏,也可设为'show'配合边距调整
)

如果是多子图,创建时用specs定义每个子图的高度/宽度占比:

from plotly.subplots import make_subplots
fig = make_subplots(
    rows=2, cols=1,
    specs=[[{"type": "sankey"}], [{"type": "bar"}]],
    row_heights=[0.6, 0.4]  # 分配Sankey图和柱状图的高度占比
)

3. 导出时指定高清参数与格式

编程导出时直接指定scale参数提升分辨率,同时支持PNG和PDF两种格式:

# 导出PNG(3倍高清,避免模糊)
fig.write_image("subplot_export.png", scale=3)
# 导出PDF(矢量格式,用固定尺寸保证布局一致)
fig.write_image("subplot_export.pdf", width=1200, height=800)

PDF是矢量格式,导出时尽量用自定义尺寸而非依赖自动适配,确保和HTML里的显示效果一致。

4. 调整Sankey图的标签与节点参数

Sankey图的标签是布局错乱的重灾区,单独调整标签字体、节点间距:

fig.update_layout(
    sankey=dict(
        node=dict(
            label=dict(font=dict(size=12)),  # 固定标签字体大小
            pad=15,  # 增大节点之间的间距
            thickness=20  # 调整节点厚度,避免标签重叠
        )
    )
)

5. 临时禁用干扰布局的元素

如果hover提示、图例等元素导致布局错乱,可临时禁用或调整位置:

fig.update_layout(
    hovermode=False,  # 禁用hover提示,避免导出时额外元素干扰
    showlegend=False  # 若图例占空间,可先隐藏或调整到不影响的位置
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:51:03