2013-05-11 22 views
22

Quindi, ho pensato che sarebbe stato molto semplice, ma ho avuto un sacco di risultati difficili esattamente quello che sto cercando in un esempio comprensibile.Colorplot di matrice 2D matplotlib

Fondamentalmente voglio creare grafici di fase, quindi supponendo di avere un array 2d, come posso ottenere matplotlib per convertirlo in un grafico a cui è possibile allegare titoli, assi e legende (barre dei colori).

Sto cercando una soluzione per bare bare estremamente semplice che utilizza solo ciò che è necessario per funzionare con qualsiasi array 2D.

Sono certo che questo è semplice e in qualche modo mi sento solo un po 'grosso, ma ho davvero molti problemi con questo.

Sono stato tooling con gli esempi, ma non sembrano adatti a quello che sto cercando di fare: mi piace l'aspetto generale di questo grafico, vorrei solo poter passare in un 2dArray e hanno lo stesso risultato:

import numpy as np 
import matplotlib as ml 
import matplotlib.pyplot as plt 

H = [[1,2,3,4][5,6,7,8][9,10,11,12][13,14,15,16]] 

fig = plt.figure(figsize=(6, 3.2)) 

ax = fig.add_subplot(111) 
ax.set_title('colorMap') 
X,Y = np.meshgrid(xedges, yedges) 
plt.pcolormesh(X, Y, H) 
ax.set_aspect('equal') 

cax = fig.add_axes([0.12, 0.1, 0.78, 0.8]) 
cax.get_xaxis().set_visible(False) 
cax.get_yaxis().set_visible(False) 
cax.patch.set_alpha(0) 
cax.set_frame_on(False) 
plt.colorbar(orientation='vertical') 
plt.show() 
+0

'imshow' non funziona? http://matplotlib.org/gallery.html – tacaswell

+1

E puoi mostrarci cosa hai provato? – tacaswell

+0

fai clic sull'immagine che assomiglia a ciò che desideri, include il codice. – tacaswell

risposta

30

Ho paura che l'esempio pubblicato non funzioni, poiché X e Y non sono definiti. Così, invece di pcolormesh usiamo imshow:

import numpy as np 
import matplotlib.pyplot as plt 

H = np.array([[1, 2, 3, 4], 
       [5, 6, 7, 8], 
       [9, 10, 11, 12], 
       [13, 14, 15, 16]]) # added some commas and array creation code 

fig = plt.figure(figsize=(6, 3.2)) 

ax = fig.add_subplot(111) 
ax.set_title('colorMap') 
plt.imshow(H) 
ax.set_aspect('equal') 

cax = fig.add_axes([0.12, 0.1, 0.78, 0.8]) 
cax.get_xaxis().set_visible(False) 
cax.get_yaxis().set_visible(False) 
cax.patch.set_alpha(0) 
cax.set_frame_on(False) 
plt.colorbar(orientation='vertical') 
plt.show() 
+2

Si noti che otterrete gli indici di array nella legenda degli assi. Se le tue righe e colonne hanno valori X e Y, dai un'occhiata al parametro 'extent' di' imshow() ' – heltonbiker

2

Ecco l'esempio più semplice che ha le linee principali di codice:

import numpy as np 
import matplotlib.pyplot as plt 

H = np.array([[1, 2, 3, 4], 
      [5, 6, 7, 8], 
      [9, 10, 11, 12], 
      [13, 14, 15, 16]]) 

plt.imshow(H) 
plt.show()