How to prevent alphabetical sorting for python bars with matplotlib?

前端 未结 2 570
忘了有多久
忘了有多久 2020-12-20 14:36

I\'m plotting some categorical data using a bar chart. Matplotlib keeps sorting my x-axis alphabetically even when I sort my dataframe values. Here\'s my code :



        
2条回答
  •  天命终不由人
    2020-12-20 15:01

    The issue

    This is a bug in matplotlib < 2.2.0 where the X axis is always sorted even if the values are strings. That is why the order of the bars is reversed in the following plot.

    x = ['foo', 'bar']
    y = [1, 2]
    plt.bar(x, y, color=['b', 'g'])
    

    The fix

    Upgrade matplotlib to 2.2.0 or higher. The same code produces the expected result with these versions.

    The workaround

    If you cannot or do not want to upgrade matplotlib you can use numbers instead of strings, then set the ticks and labels to the correct values:

    index = range(len(x))
    plt.bar(x, y, color=['b', 'g'])  # use numbers in the X axis.
    plt.xticks(index, x)  # set the X ticks and labels
    

    The Pandas way

    You can use Series.plot which might be convenient for you since your data is already in the form of a Series, but be aware that pandas plots things differently. Use the keyword argument rot to control the rotation of the labels.

    s = pd.Series(y, index=x)
    s.plot(kind='bar',rot=0, color=['b', 'g'])
    

提交回复
热议问题