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

Posted

技术标签:

【中文标题】Python Matplotlib饼图将两个标题相同的切片合并在一起【英文标题】:Python Matplotlib Pie chart merge two slices with identical titles together 【发布时间】:2022-01-14 22:42:36 【问题描述】:

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

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

我可以知道我该怎么做吗?谢谢。

是的,一些代码。

from matplotlib import pyplot as plt
list0 = [1,2,3]
list1 = ["apple", "banana", "banana"]
plt.pie(list0, labels = list1)
plt.show()

【问题讨论】:

【参考方案1】:

预处理您的标题和值,然后绘制图表: 我们将list0values)和list1titles)循环在一起,将titles中的每一个都作为dictionarykey,然后添加对应的valuelist0key。因此,同名标题的值将添加到字典中相同的key: val。 检查完所有项目后,我们将字典的keys 列表作为titles 返回,并将对应的values 作为每个title 的图表值返回。

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。在上面的 sn-p 中,我们对其进行了设置,它将为之前不在字典中的键设置 0

【讨论】:

【参考方案2】:

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

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()

【讨论】:

谢谢,它可以工作,但如果代码不是全部压缩在第 5 行并且如果你能解释代码,它会更好。【参考方案3】:

这个可以,

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()

输出:

【讨论】:

以上是关于Python Matplotlib饼图将两个标题相同的切片合并在一起的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib可视化饼图为饼图添加标题和标签自定义设置突出饼图中的特定区块(Pie Chart)

Python matplotlib.pyplot饼图:如何去掉左边的标签?

python使用matplotlib可视化饼图(pie plot)可视化嵌套的环形饼图(Nested circular pie chart)

Matplotlib-绘制饼图

python 使用 matplotlib.pyplot来画柱状图和饼图

Python使用matplotlib可视化时间序列数据的分解图将时间序列数据进行分解并可视化分解为趋势季节和残差等成分(Time Series Decomposition Plot)