7

我正在尝试创建一个直方图,以显示离散星级(1-5)中每个值的评级量。每个值应该有一个条形图,在 x 轴上,唯一要显示的数字是每个条形图下方的 [1,2,3,4,5](居中)。

我尝试将 bin 的数量设置为 5 或它们的范围为 0-7,但这会创建跨越值的条形(如提供的图像中所示)

在此处输入图像描述

这是我尝试过的代码(pandas 和 numpy):

df.stars.hist()

hist, bins = np.histogram(x1, bins=5)
ax.bar(bins[:-1], hist.astype(np.float32) / hist.sum(), width=(bins[1]-bins[0]), color="blue")
4

1 回答 1

9

您可以使用以下plot(kind='bar')方法:

stars = Series(randint(1, 6, size=100))
vc = stars.value_counts().sort_index()
ax = vc.plot(kind='bar')
fig = ax.get_figure()
fig.autofmt_xdate()

要得到:

在此处输入图像描述

编辑#1:要将它们显示为比例,只需除以sum

vc /= float(vc.sum())
assert vc.sum() == 1

要得到:

在此处输入图像描述

编辑#2:将它们显示为百分比除以上面的总和,并使用格式规范迷你语言来格式化 y 轴刻度标签

new_labels = ['{0:.0%}'.format(float(x.get_text())) for x in ax.get_yticklabels()]
ax.set_yticklabels(new_labels)

要得到:

在此处输入图像描述

于 2013-08-23T02:59:28.293 回答