首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Matplotlib Pie图表将两个标题相同的切片合并在一起

Python Matplotlib Pie图表将两个标题相同的切片合并在一起
EN

Stack Overflow用户
提问于 2021-12-10 07:34:38
回答 3查看 617关注 0票数 -1

我正在做一个带有饼图的matplotlib项目,希望将饼图中的两个切片与相同的标题合并在一起,形成一个具有相同标题的的大片段。

然而,matplotlib只是将切片分开,即使它们有相同的标题。

我能知道怎么做吗?谢谢。

是的,一些密码。

代码语言:javascript
复制
from matplotlib import pyplot as plt
list0 = [1,2,3]
list1 = ["apple", "banana", "banana"]
plt.pie(list0, labels = list1)
plt.show()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-12-10 07:50:39

预处理您的标题和值,然后绘制图表:

我们一起循环遍历list0 ( values)和list1 ( titles),并将每个titles作为dictionarykey,然后将对应的valuelist0添加到key。因此,相同名称的标题的值将添加到字典中的一个和相同的{key: val}中。

在检查所有项目时,我们将字典的keys列表作为titles返回相应的values作为每个title的图表值。

代码语言:javascript
复制
from matplotlib import pyplot as plt

def merge_slices(list0, list1):
    from collections import defaultdict
    dict_slices = defaultdict(lambda: 0)
    for val, title in zip(list0, list1):
        dict_slices[title] += val
    return list(dict_slices.values()), list(dict_slices.keys())

if __name__ == "__main__":
    list0 = [1,2,3]
    list1 = ["apple", "banana", "banana"]
    merged_list0, merged_list1 = merge_slices(list0 ,list1)
    plt.pie(merged_list0, labels = merged_list1)
    plt.show()

输出:

defaultdict将为字典中没有的键创建一个key并设置一个default value。在上面的片段中,我们设置它的方式是,它将为字典中没有的密钥设置0

票数 1
EN

Stack Overflow用户

发布于 2021-12-10 07:40:58

这能行,

代码语言:javascript
复制
from matplotlib import pyplot as plt

list0 = [1, 2, 3]
list1 = ["apple", "banana", "banana"]

sourceDict = {}
for i, j in zip(list1, list0):
    if not i in sourceDict:
        sourceDict.update({i: j})
    else:
        sourceDict[i] += j

plt.pie(sourceDict.values(), labels=sourceDict.keys())
plt.show()

输出:

票数 0
EN

Stack Overflow用户

发布于 2021-12-10 07:44:17

在我看来,添加聚合具有相同标题的值的代码将是最快的。

代码语言:javascript
复制
from matplotlib import pyplot as plt
list0 = [1,2,3]
list1 = ["apple", "banana", "banana"]

m = {k:sum([list0[i] for i, l in enumerate(list1) if l == k ]) for k in set(list1)}

plt.pie(m.values(), labels = m.keys())
plt.show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70301127

复制
相关文章

相似问题

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