使用字符串的Python直方图绘图

时间:2016-10-31 20:05:42

标签: python matplotlib plot

我正在尝试创建一些月度销售数据的直方图。我将数据作为有序字典提供,看起来像sales_dict = collections.OrderedDict([('Jan', 0), ('Feb', 0), ('Mar', 0), ('Apr', 0), ('May', 0), ('Jun', 0), ('Jul', 0), ('Aug', 11), ('Sept', 2), ('Oct', 2), ('Nov', 0), ('Dec', 0)])

我尝试过使用pyplot和pylab但没有成功。我希望我的直方图在x轴上有月份名称,销售数量在y轴上。我试过了:

import pylab
from random import randint

fig_num = randint(1,10000)

pylab.figure(fig_num)
pylab.hist(sales_dict.keys(),weights=data_dict.values(),bins=range(50))
pylab.show()

import matplotlib.pyplot as plt

val, weight = zip(*[(k, v) for k,v in sales_dict.items()])
plt.hist(val,weights=weight)
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.title(title)
plt.grid(True)

plt.show()

在这两种情况下我都会得到错误:"权重应该与x"具有相同的形状。我对大多数python的绘图工具都不熟悉,但我想知道是不是因为我的字典中的键是字符串而不是数字?任何澄清将不胜感激!

2 个答案:

答案 0 :(得分:7)

我不知道plt.hist是在这里使用的正确功能。相反,我会使用plt.bartick_labels参数来标记带有月份的情节:

centers = range(len(sales))
plt.bar(centers, sales.values(), align='center', tick_label=sales.keys())
plt.xlim([0, 11])

这给出了:

enter image description here

答案 1 :(得分:0)

您需要使用matplotlib的bar chart函数而不是直方图函数。