2016-01-01 3 views
5

Ich habe eine (21 x 25) 2D-Array, die zwei diskrete Werte enthält, "1" & "2". Die Werte sind wie folgt:Wie werden die Umrisse bestimmter Quadrate in einem 2D-Gitter mit pcolormesh aufgetragen?

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.]]) 

Wenn ich diese pcolor mit plotten, das resultierende Bild sieht wie folgt aus:

enter image description here

ich die Umrisse der Rasterquadrate, wo value == 2 zeichnen wollen:

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

Es scheint, als wäre der Umriss nicht einheitlich (die Linien haben unterschiedliche Schattierungen), und ich kann die Gitterlinienfarben nicht durch Ändern von edgecolor einstellen.

+0

Ich nehme an, dass "Impact == Wert"? –

+0

Sorry, ich habe vergessen, den Array-Namen zu ändern. "Auswirkung" und "Wert" sind gleich. –

Antwort

1

können Sie die Quadrate machen, wo value == 1 als transparent durch ein np.ma.masked_array von value erstellen:

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

Einstellung der colormap zu 'gray' ist ein bisschen wie ein Hack - leider scheint es, dass der Standard Colormap überschreibt die Kantenfarbe, auch wenn Sie versuchen, es explizit mit edgecolor= oder edgecolors= festzulegen. Ich bin mir nicht sicher, ob dies als Fehler in Matplotlib betrachtet werden sollte.

Verwandte Themen