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

如何格式化Holoviews桑基图数字格式并设置标签展示在图表外侧

实现代码

import holoviews as hv
import plotly.graph_objects as go
import plotly.express as pex
hv.extension('bokeh')

# 提前将收入转换为百万单位
df_final['Revenue_Million'] = df_final['Revenue'] / 1e6

# 自定义回调调整标签位置
def set_label_position(plot, element):
    node_source = plot.handles['node_source']
    node_x = node_source.data['x']
    for i in range(len(node_x)):
        # 左节点标签放在左侧
        if node_x[i] < 0.5:
            plot.handles['labels'].text_align = 'right'
            plot.handles['labels'].x_offset = -15
        # 右节点标签放在右侧
        else:
            plot.handles['labels'].text_align = 'left'
            plot.handles['labels'].x_offset = 15

# 初始化桑基图,使用百万单位的收入维度
sankey1 = hv.Sankey(df_final, kdims=['Sub_Market', 'Sport League'], 
                   vdims=[hv.Dimension('Revenue_Million', label='Revenue (Million)')])

sankey1.opts(cmap='Colorblind',
             edge_color='Sub_Market', 
             edge_line_width=0,
             node_alpha=1.0, 
             node_width=40, 
             node_sort=True,
             width=800, 
             height=600, 
             bgcolor="snow",
             title="Flow of Revenue between Sub Market and Conference",
             # 指定数值显示格式,避免科学计数法
             value_format='%.2f M',
             # 注入标签位置调整回调
             hooks=[set_label_position])

sankey1

改动说明

  • 数值格式调整:先将原始收入值除以1e6转换为百万单位,通过value_format参数指定保留两位小数并添加M后缀,彻底避免科学计数法显示。
  • 标签位置调整:通过bokeh后端的自定义回调函数,根据节点的x坐标判断所属位置,左节点标签右对齐向左偏移,右节点标签左对齐向右偏移,实现所有标签展示在图表外侧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:05