6

カラーバーを使用して、imshow を使用してプロットされた個別のコード化された値にラベルを付けようとしています。boundariesおよびキーワードを使用して必要なカラーバーを実現できますvalues。これにより、カラーバーの最大値は、プロットされるデータの最大値よりも実質的に 1 大きくなります。

カラーバーの各色範囲の中央に目盛りを配置したいのですが、データ値の制限外にあるため、カラーバーの最大の色ブロックの目盛り位置を指定できません。

問題を示すコードの簡単なブロックを次に示します。

data = np.tile(np.arange(4), 2)
fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(data[None], aspect='auto')
cax = fig.add_subplot(122)
cbar = fig.colorbar(ax.images[0], cax=cax, boundaries=[0,1,2,3,4], values=[0,1,2,3])
cbar.set_ticks([.5, 1.5, 2.5, 3.5])
cbar.set_ticklabels(['one', 'two', 'three', 'four'])

「4」があるべき場所に目盛りが欠けていることに注意してください。これを行う正しい方法は何ですか?

4

2 に答える 2

7

要約すると、これは私にとってはうまくいきます:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from matplotlib import colors

data = np.tile(np.arange(4), 2)
fig = plt.figure()
ax = fig.add_subplot(121)
cmap = cm.get_cmap('jet', 4)
bounds = np.arange(5)
vals = bounds[:-1]
norm = colors.BoundaryNorm(bounds, cmap.N)
ax.imshow(data[None], aspect='auto', interpolation='nearest', cmap=cmap, norm=norm)

cax = fig.add_subplot(122)
cbar = fig.colorbar(ax.images[0], cax=cax, boundaries=bounds, values=vals)
cbar.set_ticks(vals + .5)
cbar.set_ticklabels(['one', 'two', 'three', 'four'])

解決策は、 を使用して画像のカラーマップを明示的に指定することでしget_cmapBoundaryNorm。次に、目盛りの位置を指定するだけで機能します。結果のプロットは次のとおりです。

離散カラーバーの例

于 2012-09-25T13:38:04.313 に答える
3

colormapで同じものを使用していません。andは同じ方法で定義されているため (同じ制限など)、上記の例の矛盾に気付かないでしょう。最初に定義する必要があります。imshowcbardatacbarcolormap

データを 4 つの個別の色に分割したい場合、次のように使用できます。

import numpy as np
import pylab as plt
from matplotlib import colors, cm

data = np.tile(np.arange(4), 2)
fig = plt.figure()
ax = fig.add_subplot(121)
cax = fig.add_subplot(122)
cmap = cm.get_cmap('jet', 4) # 4 discrete color
im=ax.imshow(data[None], aspect='auto',cmap=cmap)
cbar = fig.colorbar(ax.images[0], cax=cax, cmap=cmap)
plt.show()

ここに画像の説明を入力

ticks必要に応じて配置できるようになりました。

境界とこれらの境界の色を定義する場合はListedColormap、次のように使用できます。

data = np.tile(np.arange(4), 2)
fig = plt.figure()
ax = fig.add_subplot(121)
cax = fig.add_subplot(122)
cmap = colors.ListedColormap(['b','g','y','r'])
bounds=[0,1,2,3,4]
norm = colors.BoundaryNorm(bounds, cmap.N)
im=ax.imshow(data[None], aspect='auto',cmap=cmap, norm=norm)
cbar = fig.colorbar(im, cax=cax, cmap=cmap, norm=norm, boundaries=bounds, ticks=[0.5,1.5,2.5,3.5],)
plt.show()

ここに画像の説明を入力

于 2012-09-25T07:27:25.870 に答える