2016-01-01 14 views
5

Ho un array 2D (21 x 25) che contiene due valori discreti, "1" & "2". I valori sono riportati di seguito:Come tracciare i contorni di quadrati specifici all'interno di una griglia 2D usando pcolormesh?

value = np.array(
    [[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 2., 2., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 2., 2., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 2., 1., 2., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.], 
    [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]) 

Se io tracciare questa utilizzando pcolor, la cifra risultante è simile al seguente:

enter image description here

voglio disegnare i contorni dei quadrati della griglia in cui value == 2:

xx,yy = np.linspace(0,26,25),np.linspace(0,22,22) 
xx,yy = np.meshgrid(xx,yy) 
plt.pcolormesh(xx, yy, value, facecolor='none', edgecolor='b', alpha=0.8, zorder=2) 

enter image description here

Sembra che il contorno non sia uniforme (le linee hanno sfumature diverse) e non riesco a impostare i colori della griglia cambiando edgecolor.

+0

Suppongo che 'impact == value'? –

+0

Spiacente, ho dimenticato di cambiare il nome dell'array. 'impatto' e 'valore' sono gli stessi. –

risposta

1

È possibile rendere le piazze in cui value == 1 come trasparenti creando un np.ma.masked_array da value:

c = np.ma.masked_array(value, value == 1.) # mask squares where value == 1 
plt.pcolormesh(xx, yy, c, alpha=0.8, zorder=2, facecolor='none', edgecolors='k', 
       cmap='gray') 

enter image description here

Impostazione della mappa di colori ad 'gray' è un po 'di hack - purtroppo sembra che il default colormap ha la precedenza sul colore del bordo, anche se provi a impostarlo esplicitamente usando edgecolor= o edgecolors=. Non sono sicuro se questo dovrebbe essere considerato un bug in matplotlib.

Problemi correlati