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

如何在Power BI中展示Python Plotly生成的桑基图,解决无可视化输出报错

问题原因
  • 你使用的Plotly库的fig.show()方法默认会调用系统浏览器渲染交互式图表,不会将图像输出到Power BI要求的Python默认绘图设备,因此Power BI无法检测到可视化输出,触发报错同时弹出浏览器。
修复现有代码的方案

首先提前安装依赖库:pip install kaleido(Plotly导出静态图的必需依赖)
修改后的代码如下,核心逻辑是把Plotly生成的桑基图转成静态图片后,用matplotlib渲染到Power BI可识别的默认绘图设备:

import pandas as pd
import matplotlib.pyplot as plt
import plotly.graph_objects as go
from io import BytesIO

df = dataset[['source', 'target', 'Value', 'label_s', 'label_t', 'cond', 'x_s', 'x_t']].copy().dropna()
labels = dataset[['index', 'id', 'label', 'x', 'y']].copy().dropna()
colors = dataset[['colors']].copy().dropna()

x_scale = 1/7.5
y_scale = 1/10
link = dict(source=df.source, target=df.target, value=df.Value, color=colors.colors,
            hovertemplate='%{value}')
node = dict(label=labels['label'], thickness=5, pad=50, color='gray',
            x=labels['x']*x_scale,
            y=labels['y']*y_scale)
fig = go.Figure(go.Sankey(link=link, node=node, arrangement='fixed'))

# 替换原有的fig.show()代码
# 先将Plotly图导出为png格式存到内存
img_bytes = fig.to_image(format="png", width=800, height=600)
# 用matplotlib读取图片并输出到默认绘图设备
img = plt.imread(BytesIO(img_bytes))
plt.figure(figsize=(8,6))
plt.imshow(img)
plt.axis('off')
plt.show()

注意该方案输出的是静态桑基图,不支持悬停查看数值等交互效果。

更优实现方案

如果不需要自定义节点坐标这类高度定制化的需求,优先使用Power BI原生桑基图视觉对象:

  • 直接在Power BI可视化面板中加载官方桑基图视觉,分别把对应字段拖入源、目标、值的配置栏即可生成,无需编写Python代码,渲染速度更快,还支持原生的交互筛选、钻取等功能。
    如果必须用Python实现且需要保留自定义配置,也可以选择基于matplotlib的sankey模块开发,不需要额外做格式转换,直接输出即可被Power BI识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:36:09