2016-01-01 2 views
5

"1" & "2", iki ayrık değer içeren bir (21 x 25) 2D dizilim var. değerler aşağıda gösterilmiştir: Ben pcolor kullanarak bu çizmek durumunda, ortaya çıkan rakam şöylePcolormesh kullanarak bir 2D ızgara içindeki belirli karelerin ana hatları nasıl çizilir?

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

:

enter image description here

Ben ızgara kareler hatlarını çizmek istediğiniz yeri 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

Ana hat aynı değil (satırların farklı tonları var) ve ızgara çizgisi renklerini edgecolor değiştirerek ayarlayamıyorum. np.ma.masked_arrayvalue den

+0

"impact == value" değerini varsayalım? –

+0

Üzgünüm, dizi adını değiştirmeyi unuttum. 'etki' ve 'değer' aynıdır. –

cevap

1

Sen oluşturarak nereye value == 1 şeffaf kareler işleyebilen bir:

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') 
'gray' için renk haritası ayarlanması

enter image description here

kesmek bir parçasıdır - ne yazık ki varsayılan görünüyor colormap, edgecolor= veya edgecolors='u kullanarak açık bir şekilde ayarlamaya çalışsanız bile kenar rengini geçersiz kılar. Bunun matplotlib'de bir hata olarak görülüp görülmeyeceğinden emin değilim.