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

如何保存Jupyter中Plotly手动编辑后的交互式桑基图?

问题描述

我在Jupyter Notebook中用Plotly绘制桑基图,生成的初始图表如下:
初始桑基图
每次都得手动调整图表,才能得到目标样式:
编辑后桑基图
但我没法保存编辑后的版本——用fig.write_image()保存的始终是原始图表,不是调整后的。我的代码如下:

import pandas as pd
import numpy as np
import plotly
import plotly.graph_objects as go


nodes_headers = nodes.pop(0)
links_headers = links.pop(0)
df_nodes = pd.DataFrame(nodes, columns = nodes_headers)
df_links = pd.DataFrame(links, columns = links_headers)

# Sankey plot setup
data_trace = go.Sankey(
    arrangement = "snap",
    orientation = "h",
    valueformat = ".0f",
    node = dict(
      pad = 10,
     thickness = 30,
      line = dict(
        color = "black",
        width = 0.5
      ),
      label =  df_nodes['Label'].dropna(axis=0, how='any'),
      color = df_nodes['Color']
    ),
    link = dict(
      arrowlen = 40,  
      source = df_links['Source'].dropna(axis=0, how='any'),
      target = df_links['Target'].dropna(axis=0, how='any'),
      value = df_links['Value'].dropna(axis=0, how='any'),
      color = df_links['Link Color'].dropna(axis=0, how='any'),
      #label = df_links['Label'].dropna(axis=0, how='any'),
      #hoverinfo="all",  
      #hovertemplate='Source: %{source.label}<br>Target: %{target.label}<br>Value: %{value}',
        
  )
)

layout = dict(
        title = "SENEK_Energiefluss_Diagramm",
    height = 750,
    width = 1000,
    font = dict(
      size = 10),)

fig = go.Figure(data=[data_trace], layout=layout)
fig.show()
解决方法

Plotly在Jupyter中手动调整的图表不会同步回Python的fig对象,所以直接用fig.write_image()只能保存原始配置。以下是三种可行的解决思路:

方案1:把手动调整的参数写入代码

这是最稳定的方式——直接在代码里定义你手动调整后的样式细节:

  • 若调整了节点位置,可在node字典中添加x和y参数,手动指定每个节点的坐标(范围0到1)。
  • 若修改了布局、字体等其他细节,直接在layout字典中更新对应参数。

示例:固定节点位置的代码修改

node = dict(
  pad = 10,
  thickness = 30,
  line = dict(color = "black", width = 0.5),
  label = df_nodes['Label'].dropna(axis=0, how='any'),
  color = df_nodes['Color'],
  x = [0, 0.3, 0.7, 1],  # 手动指定每个节点的x轴位置
  y = [0.1, 0.4, 0.6, 0.9]  # 手动指定每个节点的y轴位置
)

方案2:导出HTML后再保存图片

  1. 先用fig.write_html("sankey.html")将图表导出为HTML文件。
  2. 打开该HTML文件,手动调整到目标样式。
  3. 在浏览器中右键点击图表,选择「另存为图片」获取高清版本;也可使用专业截图工具截取。

方案3:使用Jupyter专属的FigureWidget

在Jupyter环境中,用plotly.graph_objects.FigureWidget替代go.Figure,手动调整的修改会同步回对象:

fig = go.FigureWidget(data=[data_trace], layout=layout)
display(fig)

调整完成后,直接调用fig.write_image("sankey_edited.png")即可保存修改后的图表。

内容的提问来源于stack exchange,提问作者Karim Yosef Rezk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:53