2011-06-07 43 views
7

Tengo una matriz numpy 2D que quiero trazar en una barra de colores. Tengo problemas para cambiar el eje para que muestren mi conjunto de datos. El eje vertical va 'abajo' de 0 a 100, mientras que yo quiero que suba 'de 0.0 a 0.1. Así que tengo que hacer dos cosas:Modificación de ejes en matplotlib gráfico de barra de color de matriz 2D

  • voltear la matriz mediante np.flipud() y luego 'flip' del eje, así
  • cambiar las etiquetas para pasar de 0.0 a 0.1, en lugar de 0 a 100

aquí es un ejemplo de lo que mi parcela barra de colores actualmente se ve así: Example of Colorbar plot

Y aquí está el código:

data = np.load('scorr.npy') 
(x,y) = np.unravel_index(data.argmax(), data.shape) 
max=data[x][y] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
cax = ax.imshow(data, interpolation='nearest') 
cbar = fig.colorbar(cax, ticks=[-max, 0, max]) 
cbar.ax.set_yticklabels([str(-max), '0', str(max)]) 
plt.show() 

¿Alguien tiene alguna sugerencia? ¡Gracias por adelantado!

Respuesta

9

Quiere ver las opciones de imshow "origen" y "extensión", creo.

import matplotlib.pyplot as plt 
import numpy as np 

x,y = np.mgrid[-2:2:0.1, -2:2:0.1] 
data = np.sin(x)*(y+1.05**(x*np.floor(y))) + 1/(abs(x-y)+0.01)*0.03 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ticks_at = [-abs(data).max(), 0, abs(data).max()] 
cax = ax.imshow(data, interpolation='nearest', 
       origin='lower', extent=[0.0, 0.1, 0.0, 0.1], 
       vmin=ticks_at[0], vmax=ticks_at[-1]) 
cbar = fig.colorbar(cax,ticks=ticks_at,format='%1.2g') 
fig.savefig('out.png') 

extent and origin

0

La única forma que conozco de cambiar las etiquetas de los ejes en un diagrama de imagen es el etiquetado manual ... Si alguien tiene un método más limpio, me encantaría aprenderlo.

ax.yaxis.set_ticks(np.arange(0,100,10)) 
ax.yaxis.set_ticklabels(['%.2f' % 0.1/100*i for i in np.arange(0,100,10)]) 
Cuestiones relacionadas