6

パブリケーションで使用するヒートマップを作成しています。公開は白黒印刷に制限されているため、グレースケールでヒートマップを作成しています。私が抱えている問題は、ヒートマップに、他のセルと視覚的に区別したい「適用外」の正方形がいくつかあることです。私の理解では、ヒートマップがスケールの両端で色付けされている場合、これは numpy のマスクされた配列を使用して(?) 可能であり、マスクされたフィールドは単に白で表示される可能性があります。問題は、NA 以外のデータの範囲を示すために、白から黒までの全スペクトルを使用したいということです。取り消し線などの他の視覚的メカニズムで NA 細胞を区別する方法はありますか?

以下は、マスクされた配列を使用したグレースケールの最小の例です (ここから適応)。NA 値はおそらくここでマスクされていますが、有効なスペクトルの上限の色として既に使用されている白を使用しているため、わかりません。

import numpy as np
from pylab import *

z = rand(10, 25)
z = np.ma.masked_array(z,mask=z>0.8)

c = pcolor(z)
set_cmap('gray')
colorbar()
c = pcolor(z, edgecolors='w', linewidths=1)
axis([0,25,0,10])
savefig('plt.png')
show()

ここに画像の説明を入力

4

2 に答える 2

14

簡単な解決策は、背景の軸パッチをハッチングすることです。例えば:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
np.random.seed(1977)

data = np.random.random((10,25))
data = np.ma.masked_greater(data, 0.8)

fig, ax = plt.subplots()
im = ax.pcolormesh(data, cmap=cm.gray, edgecolors='white', linewidths=1,
                   antialiased=True)
fig.colorbar(im)

ax.patch.set(hatch='xx', edgecolor='black')

plt.show()

ここに画像の説明を入力

空のセルの間に境界線を描画したくない場合は、pcolor代わりに を使用できることに注意してくださいpcolormesh。たとえば、次の行を変更するとします。

im = ax.pcolormesh(data, cmap=cm.gray, edgecolors='white', linewidths=1,
                   antialiased=True)

に:

im = ax.pcolor(data, cmap=cm.gray, edgecolors='white', linewidths=1)

得られるもの:

ここに画像の説明を入力

違いは微妙です - で隣接する空のセルの間に線は引かれませんpcolor。どちらの美学を好むかは完全に個人的なものですが、 と の重要な違いを浮き彫りにしpcolorますpcolormesh

于 2013-04-20T21:34:38.097 に答える
3

によるパッチを追加しても、Joe の回答を再現できませんでしたax.patch.set_hatch('x')代わりに、この質問に従ってパッチを長方形として作成する必要がありました。

import numpy as np
import matplotlib.pyplot as plt

import matplotlib.cm as cm
import matplotlib.patches as patches

data = np.random.random((10,25))
data = np.ma.masked_greater(data, 0.8)

fig, ax = plt.subplots()
im = ax.pcolormesh(data, cmap=cm.gray, edgecolors='white', linewidths=0)
fig.colorbar(im)

# ax.patch.set_hatch('x')  replaced by:
p = patches.Rectangle((0,0), 25, 10, hatch='xx', fill=None,zorder=-10)
ax.add_patch(p)

plt.show()

さらに、pcolormesh現在整理されているようですので、ここで使用できます。

于 2013-10-28T16:53:06.133 に答える