How to determine the order of bars in a matplotlib bar chart

前端 未结 2 806
执念已碎
执念已碎 2020-12-18 00:41

Suppose we read some data into a pandas data frame:

data1 = pd.read_csv(\"data.csv\", \"\\t\")

The content looks like this:

相关标签:
2条回答
  • 2020-12-18 00:41

    I modified original version of barchart. To specify order of bars I am using index set via ii column:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    def barchart(data, labels):
        pos = np.arange(len(data)) + 0.5  # the bar centers on the y axis
        plt.barh(pos, data.sort_index(), align='center', height=0.25)
        plt.yticks(pos, labels.sort_index())
    
    data1 = pd.DataFrame({'key': list('ABCDE'), 'val': np.random.randn(5)})
    
    new_keys = list('EDACB')
    data1['ii'] = [new_keys.index(x) for x in data1.key]
    
    data1 = data1.set_index('ii')
    barchart(data1["val"], data1["key"])
    plt.show()
    
    0 讨论(0)
  • 2020-12-18 01:07

    If you directly read the key as the index with

    In [12]: df = pd.read_csv('data.csv', '\t', index_col='key')
    
    In [13]: df
    Out[13]: 
         val
    key     
    A    0.1
    B    0.4
    C    0.3
    D    0.5
    E    0.2
    

    you can use ix to get the index in a different order and plot it using df.plot:

    In [14]: df.ix[list('CADFEB')].plot(kind='barh')
    Out[14]: <matplotlib.axes._subplots.AxesSubplot at 0x530fa90>
    

    barh_example.png

    (Note that F is not given in the data, but you gave it as an example)

    0 讨论(0)
提交回复
热议问题