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

然而,matplotlib只是将切片分开,即使它们有相同的标题。
我能知道怎么做吗?谢谢。
是的,一些密码。
from matplotlib import pyplot as plt
list0 = [1,2,3]
list1 = ["apple", "banana", "banana"]
plt.pie(list0, labels = list1)
plt.show()发布于 2021-12-10 07:50:39
预处理您的标题和值,然后绘制图表:
我们一起循环遍历list0 ( values)和list1 ( titles),并将每个titles作为dictionary的key,然后将对应的value从list0添加到key。因此,相同名称的标题的值将添加到字典中的一个和相同的{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。在上面的片段中,我们设置它的方式是,它将为字典中没有的密钥设置0。
发布于 2021-12-10 07:40:58
这能行,
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()输出:

发布于 2021-12-10 07:44:17
在我看来,添加聚合具有相同标题的值的代码将是最快的。
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()https://stackoverflow.com/questions/70301127
复制相似问题