首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在全息视图中显示附加值桑基标签或悬停信息

在全息视图中显示附加值桑基标签或悬停信息
EN

Stack Overflow用户
提问于 2021-06-11 22:54:29
回答 1查看 168关注 0票数 0

我想找到一种方法来修改全息图上的标签,他们显示的除了数值之外,还有百分比值。

例如:

代码语言:javascript
运行
复制
import holoviews as hv
import pandas as pd
hv.extension('bokeh')


data = {'A':['XX','XY','YY','XY','XX','XX'],
        'B':['RR','KK','KK','RR','RK','KK'],
        'values':[10,5,8,15,19,1]}

df = pd.DataFrame(data, columns=['A','B','values'])
    
sankey = hv.Sankey(df)

对于'From‘标签'YY’,它是'YY - 8‘,将其更改为'YY -8 (13.7%)’-在这里添加额外的百分比。

我已经找到了将绝对值更改为百分比的方法,方法如下:

代码语言:javascript
运行
复制
value_dim = hv.Dimension('Percentage', unit='%')

但是找不到在标签中同时包含两个值的方法。

此外,我还尝试修改了hover标签。在我寻找修改方法的过程中,我找到了在悬停信息中引用和显示各种属性的方法(通过bokeh工具提示),但似乎您无法操作这些信息。

EN

回答 1

Stack Overflow用户

发布于 2021-10-16 12:35:45

在这篇文章中,解释了两种可能的方法来实现想要的结果。让我们从示例DataFrame和必要的导入开始。

代码语言:javascript
运行
复制
import holoviews as hv
from holoviews import opts, dim # only needed for 2. solution
import pandas as pd

data = {'A':['XX','XY','YY','XY','XX','XX'],
        'B':['RR','KK','KK','RR','RK','KK'],
        'values':[10,5,8,15,19,1],
       }

df = pd.DataFrame(data)

1. Option hv.Dimension(spec, **params),它允许您将带有关键字value_format的格式化程序应用到列名。这个格式化程序很简单,就是值和百分比值的组合。

代码语言:javascript
运行
复制
total = df.groupby('A', sort=False)['values'].sum().sum()

def fmt(x):
    return f'{x} ({round(x/total,2)}%)'

hv.Sankey(df, vdims = hv.Dimension('values', value_format=fmt))

2.选项将DataFrame df扩展一列,其中存储您要使用的标签。这可以在以后通过opts(labels=dim('labels'))在Sankey中重用。要检查计算是否正确,可以启用show_values,但这将导致标签内出现重复。因此,在最终的解决方案中,show_values被设置为False。有时这可能很难找到正确的顺序。

代码语言:javascript
运行
复制
labels = []
for item in ['A', 'B']:
    grouper = df.groupby(item, sort=False)['values']
    total_sum = grouper.sum().sum()
    for name, group in grouper:
        _sum = group.sum()
        _percent = round(_sum/total_sum,2)
        labels.append(f'{name} - {_sum} ({_percent}%)')
df['labels'] = labels

hv.Sankey(df).opts(show_values=False, labels=dim('labels'))

此解决方案的缺点是,我们对列'A''B'都应用了groupby。这也是holoviews将要做的事情。所以这并不是很有效。

输出

评论

除了HoverTool不同之外,这两种解决方案产生的数字几乎相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67939221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档