我怎么能像这样绘制直方图?

时间:2015-12-07 07:37:55

标签: python python-2.7 matplotlib plot

我有一个txt文件,文件包含

('computer', 1592)
('student', 1113)
('university', 1080)
('raspberry', 1000)
('science', 814)
('$5', 770)
('pi', 688)
('exam', 571)
('just', 544)
('intelligence', 495)
('solution', 475)
('costs', 423)
('exam:', 411)
('latest', 402)
('pi's', 366)
('be', 311)
('can', 268)
('what', 268)
('way', 257)
('students', 238)

I want to plot it like this

我该怎么做?

2 个答案:

答案 0 :(得分:2)

像这样阅读你的文件:

numbers = []
labels = []
with open('myfile.txt') as fobj:
    for line in fobj:
        if not line.strip():
            continue
        label, number = line.split(',')
        numbers.append(int(number.strip()[:-1]))
        labels.append(label[2:-1])

现在:

>>> print(numbers)
[1592, 1113, 1080, 1000, 814, 770, 688, 571, 544, 495, 475, 423, 411, 402,
 366, 311, 268, 268, 257, 238]
>>> labels
['computer', 'student', 'university', 'raspberry', 'science', '$5', 'pi',
 'exam', 'just', 'intelligence', 'solution', 'costs', 'exam:', 'latest', 
 "pi's", 'be', 'can', 'what', 'way', 'students']

绘图:

from matplotlib import pyplot as plt

x = list(range(len(numbers)))
plt.bar(x, numbers)
plt.xticks(x, labels, rotation=90)
plt.savefig('hist.png', dpi=300)

enter image description here

答案 1 :(得分:0)

您可以使用matplotlib绘制直方图(请参阅此链接:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.hist)。 为了逐行读取文件,python(http://www.tutorialspoint.com/python/file_read.htm)中包含了read函数。 要分割2个逗号分隔值,您可以使用分割功能(在读取功能的结果字符串上)和','作为分离参数。 我希望这对你有所帮助。 要删除前导空格符号或括号,有一个名为strip()的函数,它也适用于字符串。