在matplot lib和python中的条形图列表中对项目进行分组

时间:2018-08-20 21:19:48

标签: python matplotlib

我想制作一个条形图或饼图,以查看列表中每个项目代表多少次。一些虚拟数据...

mylist = [a,a,b,c,c,c,c,d,d]

我想要的是一个能反映出的条形图(a = 2,b = 1,c = 4等...)

实际上,我的清单更长,这不是手动完成的事情。我开始制作一个“ for循环”,将每个项目与上一个进行比较,如果与上一个不同,则创建一个新列表,但这看起来很麻烦。必须有一种简单而优雅的方法来做到这一点。很抱歉,如果此问题已得到解决,在搜索时我得到的结果太简单或太复杂。这被标记为重复的方式,用于计数列表中的元素,这是不同的,因为它也处理了图形。

3 个答案:

答案 0 :(得分:2)

您可以做的只是遍历列表,并使用每个项目的频率更新字典。
示例:

import matplotlib.pyplot as plt

mylist = ['a','a','b','c','c','c','c','d','d']

#create a dictionary with the frequency of each item
frequencies = {}
for item in mylist:
    if item in frequencies:
        frequencies[item]+=1
    else:
        frequencies[item] = 1

# plot it
plt.figure()
plt.bar(frequencies.keys(), frequencies.values())
plt.show()

答案 1 :(得分:1)

尝试使用此:

from collections import Counter
mylist = [a,a,b,c,c,c,c,d,d]
Counter(mylist)

答案 2 :(得分:0)

另一种解决方案:

import collections
import matplotlib.pyplot as plt
figure = plt.figure(figsize=(8,6))

mylist = ['a','a','b','c','c','c','c','d','d']
co = collections.Counter(mylist)
plt.bar(range(len(co.keys())), list(co.values()), tick_label=list(co.keys()))
plt.xlabel('Items')
plt.ylabel('Frequency'), list(co.values()), tick_label=list(co.keys()))

输出

enter image description here