绘制文本值的直方图

时间:2015-02-12 09:07:30

标签: python matplotlib histogram

假设我有一个文本值列表(即名称),我想绘制这些值的直方图,其中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个不同的名称)。我无法理解为什么这个简单的示例列表会给出错误,而完整的列表却没有。

但实际的一点是:我可以进行直方图,但是没有用名字标记。我怎么能这样做?

由于

1 个答案:

答案 0 :(得分:4)

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

example histogram