如何格式化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
相关产品推荐
相关产品推荐

