条形图不遵守matplotlib中图例文本的顺序

时间:2017-10-24 10:25:12

标签: python pandas matplotlib

注意到图例文本与绘图栏的顺序不同。我希望在传奇的第一位看到“香蕉”。有可能纠正这种行为吗?感谢

我的代码是:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"Apple" : [2,3,4,1], "Banana" : [4,2,1,2]})

ax = df.plot.barh()
ax.legend()

plt.show()

我的图表:

enter image description here

2 个答案:

答案 0 :(得分:2)

图例标签实际上是正确排序的。 Matplotlib的垂直轴默认从底部开始向上延伸。因此,蓝色条纹首先出现,就像传说中一样。

您可以反转图例句柄和标签:

h, l = ax.get_legend_handles_labels()
ax.legend(h[::-1], l[::-1])

enter image description here

您也可以决定反转y轴。

ax = df.plot.barh()
ax.invert_yaxis()

enter image description here

答案 1 :(得分:2)

图例排序选择图例处理程序的顺序,您必须按相反顺序对列的数据框名称进行排序(对列轴使用reindex_axis)。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({"Apple" : [2,3,4,1], "Banana" : [4,2,1,2]})
df = df.reindex_axis(reversed(sorted(df.columns)), axis = 1)
ax = df.plot.barh()
ax.legend()

plt.show()

enter image description here