使用Python生成直方图

时间:2016-03-08 13:25:14

标签: python matplotlib

我有一个时间戳在ts_array的数组,其格式为dd-mm-yyyy,如03-08-2012。现在我想使用matplotlib 1.5.1Python 2.7绘制直方图,如下所示:

import matplotlib.pyplot as plt

timestamps = dict((x, ts_array.count(x)) for x in ts_array)

plt.hist(timestamps)
plt.title("Timestamp Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

例如timestamps = {'03-08-2012': 108, '15-08-2012': 16}

当我尝试运行它时会抛出TypeError: len() of unsized object。如何使用x轴上的日期(键)和y轴上的计数(值)绘制直方图?

1 个答案:

答案 0 :(得分:1)

我认为你的问题,虽然我不确定,因为我不知道ts_array的样子,但hist尝试创建直方图,然后绘制在条形图中。您想要的只是绘制一个条形图:从您的陈述中看起来timestamps是生成该条形图所需的数据吗?

所以你可以这样做:

timestamps = {'03-08-2012': 108, '15-08-2012': 16}  # Sample data

# Get the heights and labels from the dictionary
heights, labels = [], []
for key, val in timestamps.iteritems():
    labels.append(key)
    heights.append(val)

# Create a set of fake indexes at which to place the bars
indexes = np.arange(len(timestamps))
width = 0.4

# Generate a matplotlib figure and plot the bar chart
fig, ax = plt.subplots()
ax.bar(indexes, heights)

# Overwrite the axis labels
ax.set_xticks(indexes + width)
ax.set_xticklabels(labels)

这是example in the docs的某种修改版本。希望这会有所帮助。