首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘图饼图中的自定义文本标签

绘图饼图中的自定义文本标签
EN

Stack Overflow用户
提问于 2020-12-03 12:43:35
回答 2查看 461关注 0票数 0

我正尝试在绘图饼图中添加自定义文本。

我希望最大的份额被标记为Rank 1,第二大Rank 2,依此类推...

有没有办法使用texttemplate或其他方法来做到这一点?

代码语言:javascript
复制
import plotly.graph_objects as go
labels = list('ABCD')
values = [25,45,13,78]
fig = go.Figure(data=[go.Pie(labels=labels, values=values,
                      texttemplate=("Rank %i" % 1))])
fig.show()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-03 12:58:00

您需要此函数:

代码语言:javascript
复制
def get_ranks(lst, begin_with_one=False):
    srtd = sorted(lst, reverse=True)
    res = [srtd.index(x) for x in lst]
    return [x + 1 for x in res] if begin_with_one else res
代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
labels = list('ABCD')
values = [25,45,13,78]
fig = go.Figure(data=[go.Pie(labels=labels, values=values,
                      texttemplate=[f"Rank {x}" for x in get_ranks(values, begin_with_one=True)])])
fig.show()

尽可能多地使用Python3中的f字符串-它们非常方便!

因为这只适用于唯一的列表元素,所以我创建了一个更好的索引评估器:

代码语言:javascript
复制
def map_to_index(lst1, lst2):
    """Return lst1 as indexes of lst2"""
    dct = {}
    for i, x in enumerate(lst2):
        dct[x] = dct.get(x, []) + [i]
    indexes = []
    for x in lst1:
        indexes.append(dct[x][0])
        if len(dct[x]) > 0:
            dct[x] = dct[x][1:]
    return indexes

和一个改进的get_ranks()

代码语言:javascript
复制
def get_ranks(lst, begin_with_one=False):
    srtd = sorted(lst, reverse=True)
    res = map_to_index(lst, srtd)
    return [x + 1 for x in res] if begin_with_one else res

然后它还可以与以下组件一起使用:

代码语言:javascript
复制
import plotly.graph_objects as go
import numpy as np
labels = list('ABCDEF')
values = [25,45,13,78,45,78] # with elements of same value
fig = go.Figure(data=[go.Pie(labels=labels, values=values,
                      texttemplate=[f"Rank {x}" for x in get_ranks(values, begin_with_one=True)])])
fig.show()
票数 0
EN

Stack Overflow用户

发布于 2020-12-03 12:57:19

将数组传递给texttemplate有助于

代码语言:javascript
复制
import plotly.graph_objects as go
labels = list('ABCD')
values = [25,45,13,78]
fig = go.Figure(data=[go.Pie(labels=labels, values=values,
                      texttemplate=([4,2,3,'Rank 1']))])
fig.show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65120048

复制
相关文章

相似问题

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