4

imshowグラフの選択した領域にカスタムパターンを配置する方法はありますか?正確には、数値データを運ぶ色付きの正方形に加えて、他の正方形のパターンが異なることで、実験の失敗モードが異なることを示すようにする必要があります(また、これらの意味を説明するキーを生成します)異なるパターン)。有用なパターンの例は、さまざまなタイプのクロスハッチです。グラフの主な色と数値のデータの関係を乱すことなく、これを実行できる必要があります。

以下は、回答で提案されたものを使用するための私の試みからのコードです。エラーセクションにコメントすると、マスキングからのデータがない場合は常に、imshowが空白で正常に表示されます。私は、さまざまな障害タイプに対してさまざまな種類のハッチングを実行しようとはしていません。また、シミュレーションまたは実験のいずれかが機能したが、もう一方はまだ機能しなかった場合に対処しようとはしていません。

EDIT3:マルチプロセッシングパッケージから、オブジェクトを「ピクルスにできない」というエラーマッサージを受け取っています。プログラムにより、これはマルチプロセッシングパッケージを通過する一部です。これを修正する方法、またはadd_patchesなしで実行する方法はありますか(プロットは完全に異なる座標系で行われ、接続線を描画するため、以下に提案するプロット方法は機能しません)?

import numpy as np
import matplotlib.patches as patches
...
grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
if show_fail and faildat != []:
    faildat = faildat[np.lexsort((faildat[:,yind],faildat[:,xind]))]
    fails = []
    for i in range(len(faildat)):
        fails.append((faildat[i,1],faildat[i,0]))
    for F in fails:
        p = patches.Rectangle(F,1,1,hatch='/',fill=False)
        plot.add_patch(p)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))        
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)        
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()
4

1 に答える 1

12

これを行うにはいくつかの方法がありますが、大きな領域または散在する個々のピクセルをマークする必要があるかどうかによって異なります。

大きな領域をマークする必要がある場合は、画像の上に長方形を追加することでこれを行うことができます。

import matplotlib as mpl
import matplotlib.pyplot as plt
from numpy.random import rand

ax = plt.gca()
ax.imshow(rand(50,50))
ax.add_patch(mpl.patches.Rectangle((2,2),20,20,hatch='//////////',fill=False,snap=False))
plt.draw()

Rectangle (doc)さまざまなハッシュオプション。これは、画像の上にアーティストを追加するだけであり、データとカラーのマッピングにはまったく影響しません。数が多い/と、ハッシュマークの密度が高くなります。これは、小さなボックスでハッシュを実際に確認するために必要な場合があります。

元:

from numpy.random import rand
import matplotlib as mpl
import matplotlib.pyplot as plt
     
ax = plt.gca()
ax.imshow(rand(50,50),interpolation='nearest')
for i,j in np.floor(50*rand(10,2)).astype('int'):
    ax.add_patch(mpl.patches.Rectangle((i-.5, j-.5), 1, 1, hatch='///////', fill=False, snap=False))

plt.draw()

いくつかのピクセルがハッチングされた画像 ここで数ピクセルをマークする必要があり、プロットするだけでうまくいく可能性がある場合(plot([x],[y],marker='x')マーカーサイズを使用して遊んでいる可能性があります)。

于 2012-12-27T04:48:33.280 に答える