Estoy usando la función imshow()
de matplotlib para mostrar un pandas.DataFrame
.pandas, matplotlib, utilice el índice del marco de datos como etiquetas de control del eje
Me gustaría que las etiquetas y marcas de los ejes xey se extraigan de las listas DataFrame.index y DataFrame.columns, pero no puedo encontrar la manera de hacerlo.
Suponiendo que data
es una pandas.DataFrame
:
>>> print data
<class 'pandas.core.frame.DataFrame'>
Index: 201 entries, 1901 to 2101
Data columns:
jan 201 non-null values
feb 201 non-null values
mar 201 non-null values
apr 201 non-null values
may 201 non-null values
jun 201 non-null values
jul 201 non-null values
aug 201 non-null values
sep 201 non-null values
oct 201 non-null values
nov 201 non-null values
dec 201 non-null values
Cuando hago esto:
ax1 = fig.add_subplot(131, xticklabels=data.columns, yticklabels=data.index)
ax1.set_title("A")
ax1.tick_params(axis='both', direction='out')
im1 = ax1.imshow(data,
interpolation='nearest',
aspect='auto',
cmap=cmap)
termino con etiquetas señalizadoras bien espaciadas en el eje y de la imagen, pero las etiquetas se 1901-1906 en lugar de 1901 a 2101. Del mismo modo, las etiquetas tic del eje x son feb-jul en lugar de jan-dec.
Si uso
ax1 = fig.add_subplot(131) # without specifying tick labels
Entonces termino con las etiquetas del eje de garrapatas simplemente ser los valores de índice ndarray subyacentes (es decir, 0-201 y 0-12). No es necesario modificar el espaciado o la cantidad de marcas y etiquetas, solo quiero que el texto de la etiqueta provenga del índice de DataFrame y las listas de columnas. ¿No estoy seguro de si me falta algo fácil o no?
Gracias de antemano.
Esta es la solución más general, sin necesidad de hackers DateTime, etc. – FuzzyDuck