我有一个时间戳在ts_array
的数组,其格式为dd-mm-yyyy
,如03-08-2012
。现在我想使用matplotlib 1.5.1
和Python 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轴上的计数(值)绘制直方图?
答案 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的某种修改版本。希望这会有所帮助。