2015-02-12 144 views
1

比方说,我有一个文本值列表(即名称),我想绘制这些值的直方图,并用这些名称标记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个不同的名字) 。我一直无法明白为什么这个简单的示例列表给出了一个错误,而完整的不是。

但实际的一点是:我可以做直方图,但箱不标有名称。我怎么能这样做?

感谢

回答

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

+0

非常漂亮的卡斯滕。 – Chef1075 2015-02-12 09:41:51

+0

谢谢!使用集合可以解决问题。 – elrezad 2015-02-13 09:06:10