0

colorbar何も表示せずに、で使用されているものと同じパディングを維持する方法はありますcolobarか?

なんで ?実際、これにより、カラーシェーディング情報のない1つのプロットから、コロバーを使用するプロットに渡すときに、1つの視覚効果を実行できます。

これがこの投稿からの開始コードの1つです。

from matplotlib.pylab import *
import matplotlib.cm as cm

min_val = 0
max_val = 1

# See : http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps
my_cmap = cm.get_cmap('jet') # or any other one
norm = matplotlib.colors.Normalize(min_val, max_val) # the color maps work for [0, 1]

cmmapable = cm.ScalarMappable(norm, my_cmap)
cmmapable.set_array(range(min_val, max_val))

figure()
ax = gca()

cbar = colorbar(cmmapable, ticks=[0, 1])
cbar.ax.set_yticklabels(['Min', 'Max'])

show()
4

1 に答える 1

1

私が理解しているのは、2つのスライドでプレゼンテーションなどを作成したいということです。1つはカラーバーのないプロットで、次のスライドはカラーバーのある同じプロットで作成します。スライドを変更したときにプロットがジャンプしたりサイズ変更されたりしないように、2つのスライドのプロットは同じサイズである必要があります。

カラーマップを設定すると、元のAxesインスタンスのサイズが変更されます。ax.get_position()サイズ変更されたのバウンディングボックスを取得するために使用できますAxes。バウンディングボックスを返します。Bbox(array([[ 0.125, 0.1 ], [ 0.745, 0.9 ]]))左、下、右、および上端を示します。以下に示すように、少しごまかして使用する方が簡単ですax._position.bounds。これにより、新しい軸を作成するために直接使用できる長方形(左端、下端、幅、高さ)が得られます。

import matplotlib 
import matplotlib.pyplot as plt

min_val = 0
max_val = 1

my_cmap = matplotlib.cm.get_cmap('jet') 
norm = matplotlib.colors.Normalize(min_val, max_val) 

cmmapable = matplotlib.cm.ScalarMappable(norm, my_cmap)
cmmapable.set_array(range(min_val, max_val))

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)

cbar = plt.colorbar(cmmapable, ax = ax1, ticks=[0, 1])
cbar.ax.set_yticklabels(['Min', 'Max'])

# gives bounding box with left, right, bottom, top
print(ax1.get_position())
# gives rectangle with left, bottom, width, height
print(ax1._position.bounds)

fig2 = plt.figure()
ax2 = fig2.add_axes(ax1._position.bounds)

plt.show()

更新:上記のソリューションにはカラーバーはありません。以下のソリューションにはカラーバーがありますが、白にし、ラベルとスパインを削除します。図の背景色が白以外の場合は、カラーバーがあるはずの場所に白い長方形が表示されます。

import matplotlib 
import matplotlib.pyplot as plt

min_val = 0
max_val = 1

my_cmap = matplotlib.cm.get_cmap('jet') 
norm = matplotlib.colors.Normalize(min_val, max_val) 

cmmapable = matplotlib.cm.ScalarMappable(norm, my_cmap)
cmmapable.set_array(range(min_val, max_val))

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)

# set opacity to 0
cbar = plt.colorbar(cmmapable, ax = ax1, ticks=[0, 1], alpha = 0)

# remove the tick labels
cbar.ax.set_yticklabels(['', ''])
# set the tick length to 0
cbar.ax.tick_params(axis = 'y', which = "both", length = 0)

# set everything that has a linewidth to 0
for a in cbar.ax.get_children():
    try:
        a.set_linewidth(0)
    except:
        pass

plt.show()   
于 2013-03-10T10:34:33.147 に答える