绘制文本值的直方图

Plot a histogram of text values

假设我有一个文本值列表(即名称),我想绘制这些值的直方图,xticks 标有这些名称。

import matplotlib.pyplot as plt
listofnames = ['Al', 'Ca', 'Re', 'Ma', 'Al', 'Ma', 'Ma', 'Re', 'Ca']
a,b,c = plt.hist(listofnames)

首先,这段代码报错

TypeError: cannot perform reduce with flexible type

我的完整程序中没有(包含 >2k 个名称的列表,不超过 12 个不同的名称)。我无法理解为什么这个简单的示例列表会出错,而完整的示例列表却不会。

但实际要点是:我可以绘制直方图,但箱子没有标有名称。我该怎么做?

谢谢

使用xticks函数:

plt.xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )

完整示例(顺便说一句,你的代码对我不起作用,但我得到的不是你的错误,而是 TypeError: len() of unsized object,所以我在这里手动绘制直方图):

import matplotlib.pyplot as plt
listofnames = ['Al', 'Ca', 'Re', 'Ma', 'Al', 'Ma', 'Ma', 'Re', 'Ca']
import collections
x = collections.Counter(listofnames)
l = range(len(x.keys()))
plt.bar(l, x.values(), align='center')
plt.xticks(l, x.keys())