我想制作一个条形图或饼图,以查看列表中每个项目代表多少次。一些虚拟数据...
mylist = [a,a,b,c,c,c,c,d,d]
我想要的是一个能反映出的条形图(a = 2,b = 1,c = 4等...)
实际上,我的清单更长,这不是手动完成的事情。我开始制作一个“ for循环”,将每个项目与上一个进行比较,如果与上一个不同,则创建一个新列表,但这看起来很麻烦。必须有一种简单而优雅的方法来做到这一点。很抱歉,如果此问题已得到解决,在搜索时我得到的结果太简单或太复杂。这被标记为重复的方式,用于计数列表中的元素,这是不同的,因为它也处理了图形。
答案 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()))
输出