Cómo determinar el orden de las barras en un gráfico de barras de matplotlib

Supongamos que leemos algunos datos en un dataframe de pandas:

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

El contenido se ve así:

introduzca la descripción de la imagen aquí

Y luego defina una función que nos dé un gráfico de barras horizontal, donde las longitudes de las barras representen valores y las barras estén etiquetadas con las teclas.

 def barchart(data, labels): pos = arange(len(data))+.5 # the bar centers on the y axis barh(pos, data, align='center', height=0.25) yticks(pos, labels) 

Entonces llamamos a la función de ttwig de esta manera:

 barchart(data1["val"], data1["key"]) 

Lo que nos da la siguiente ttwig:

introduzca la descripción de la imagen aquí

Ahora, ¿qué determina el orden de las barras?

Supongamos que queremos las barras en un orden especial, digamos [C, A, D, F, E, B] , ¿cómo podemos hacer cumplir esto?

Modifiqué la versión original de barchart. Para especificar el orden de las barras, estoy usando el conjunto de índices en la columna ii:

 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() 

Si lees directamente la clave como índice con

 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 

puede usar ix para obtener el índice en un orden diferente y df.plot usando df.plot :

 In [14]: df.ix[list('CADFEB')].plot(kind='barh') Out[14]:  

barh_example.png

(Tenga en cuenta que F no se da en los datos, pero lo dio como ejemplo)