色を制限するための標準的な解決策はありませんカラーバーで範囲を指定します通常、画像の色に直接リンクされます。
解決策は、イメージに依存しないカラーバーを作成し、別のカラーマップで埋め込むことです。この追加のカラーマップは、必要なそれぞれの部分を切り取って元のカラーマップから取り出すことができます。
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.colors
import numpy as np
# some data between 0 and 27
image = np.random.rand(30,60)*27
image[:,30:] = np.sort(image[:,30:].flatten()).reshape(30,30)
plt.figure(figsize=(8,3))
cmap = plt.get_cmap('jet')
im=plt.imshow(image, interpolation='nearest',origin='lower', cmap = cmap)
plt.title('mymap')
a=round(image.max(),0)
vmin=17 #minimum value to show on colobar
vmax = a #maximum value to show on colobar
norm = matplotlib.colors.Normalize(vmin=vmin, vmax =vmax)
#generate colors from original colormap in the range equivalent to [vmin, vamx]
colors = cmap(np.linspace(1.-(vmax-vmin)/float(vmax), 1, cmap.N))
# Create a new colormap from those colors
color_map = matplotlib.colors.LinearSegmentedColormap.from_list('cut_jet', colors)
# create some axes to put the colorbar to
cax, _ = matplotlib.colorbar.make_axes(plt.gca())
cbar = matplotlib.colorbar.ColorbarBase(cax, cmap=color_map, norm=norm,)
cbar.set_ticks([17,23,a])
cbar.set_ticklabels([17,23,a])
plt.show()
私はこれが好きですが、(些細な質問の警告)右側の部分を取り除きたいと思います。しかし、私はそれが正しいカラーバーが作成される "ベースライン"であるので、私はできないと思います。 – FaCoffee
"右側の部分"はどういう意味ですか? – ImportanceOfBeingErnest