2016-12-05 21 views
0

は、あなたがこのようなimshowで画像を作成言ってやるがいい。Matplotlib:カラーバーの不要部分を "カット"する方法は?

plt.set_cmap('viridis') 
im=plt.imshow(mydata, interpolation='nearest',origin='lower') 
plt.title('mymap') 
cbar=plt.colorbar() 
a=round(mydata.max(),0) 
cbar.set_ticks([17,23,a]) 
cbar.set_ticklabels([17,23,a]) 

はあなたがほとんどの値は0で、連続のようなデータセットを持っていると言うが、最も高い値の範囲につながるジャンプがあります。

がどのようにあなたはそれがmydata.min()=17から始まることを確認するためにカラーバーを「カット」か、画像の色を変更せずに、mydata.max()=27で終了?


私はこれたくない:

enter image description here

答えて

1

色を制限するための標準的な解決策はありませんカラーバーで範囲を指定します通常、画像の色に直接リンクされます。

解決策は、イメージに依存しないカラーバーを作成し、別のカラーマップで埋め込むことです。この追加のカラーマップは、必要なそれぞれの部分を切り取って元のカラーマップから取り出すことができます。

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() 

enter image description here

+0

私はこれが好きですが、(些細な質問の警告)右側の部分を取り除きたいと思います。しかし、私はそれが正しいカラーバーが作成される "ベースライン"であるので、私はできないと思います。 – FaCoffee

+0

"右側の部分"はどういう意味ですか? – ImportanceOfBeingErnest

1

試してみてください。

fig, ax = plt.subplots() 
cax = ax.imshow(mydata,interpolation='nearest',origin='lower') 
cbar = fig.colorbar(cax, ticks=[17,23,a]) 
cbar.ax.set_yticklabels(["add your label names"]) 

plt.show() 

も参照してください。http://matplotlib.org/examples/pylab_examples/colorbar_tick_labelling_demo.html

+0

私が期待どおりに動作しません。この例では、バーをそのまま表示しています。 – FaCoffee

+0

@ CF84は私の答えを更新しました。それは意味がありますか? –

+0

@ d.grinerあなたの解決策は、質問の太字で書かれた要件を満たしていません。 – ImportanceOfBeingErnest

関連する問題