Python 如何让matplotlib以与列表相同的顺序排列条形图?
对于一个类项目,我正在绘制条形图。我有一个python列表,其中包含一组标签(偶数、奇数、正方形、3的幂等)和一个numpy数组,用于保存与每个标签相关联的概率(与标签列表的顺序相同)。当我绘制图表时Python 如何让matplotlib以与列表相同的顺序排列条形图?,python,numpy,matplotlib,Python,Numpy,Matplotlib,对于一个类项目,我正在绘制条形图。我有一个python列表,其中包含一组标签(偶数、奇数、正方形、3的幂等)和一个numpy数组,用于保存与每个标签相关联的概率(与标签列表的顺序相同)。当我绘制图表时 标签=[“偶数”、“奇数”、“平方”、“3的幂] 它将条形图的值按逆字母顺序排列,因此它不是按偶数、奇数、正方形排序,而是按正方形、3的幂、奇数、偶数等排序。如何使我的绘图与列表保持相同的顺序?中的第一个参数是条形图的垂直坐标,因此您可能需要类似于 fig, ax = plt.subplots()
标签=[“偶数”、“奇数”、“平方”、“3的幂]
它将条形图的值按逆字母顺序排列,因此它不是按偶数、奇数、正方形排序,而是按正方形、3的幂、奇数、偶数等排序。如何使我的绘图与列表保持相同的顺序?中的第一个参数是条形图的垂直坐标,因此您可能需要类似于
fig, ax = plt.subplots()
y = np.arange(len(labels))
ax.barh(y, probability)
ax.set_yticks(y)
ax.set_yticklabels(labels)
这样,条将按照列表的顺序从上到下排列。如果你想换一种方式,你可以简单地做
fig, ax = plt.subplots()
y = np.arange(len(labels))
ax.barh(y, probability)
ax.set_yticks(y)
ax.set_yticklabels(labels)
ax.invert_yaxis()
相反
编辑:鉴于@ImportanceOfBeingErnest的评论,我应该注意到上面的测试是使用
matplotlib
2.1.1.到目前为止,matplotlib的2.1.2版,分类轴将按字母顺序排序。这是一种不希望出现的行为,但尚未修复,请参见例如。很可能,在将来的某个时候会修复它。目前唯一的选择是绘制数字,就像matplotlib 2.1之前一样。显示了如何执行此操作。您可以使用ax.invert_yaxis()
来反转轴,而不是绘制反转列表([:-1]
),这可能会使更改更容易,例如在barh
和bar
之间。啊,很有用,让我更新答案以反映这一点。
fig, ax = plt.subplots()
y = np.arange(len(labels))
ax.barh(y, probability)
ax.set_yticks(y)
ax.set_yticklabels(labels)
ax.invert_yaxis()