2

カラーバーを使用して等高線図/ヒート マップを生成し、注釈ボックスを追加します。この図は醜いですが、私が望むものになります:

サンプル画像

add_subplot()十分ではありません。すべてを同じサブプロットに入れようとすると、ボックスが隠されます。ドラッグ可能にしてから画像のサイズを調整することでこれを回避できますが、これは良くありません。これらの画像をいくつか作成する必要がありますが、すべて標準サイズであり、サイズと何度も何度も戦うことはできません.

axes()ボックスを別の軸に入れてみました。しかし、それは私のカラーバーのほとんどをカバーするプロット用の新しいウィンドウを生成します. ウィンドウを完全に透明にする方法があると思います。しかし、ここまで来ると、私のアプローチは完全に間違っているに違いないと思います。

これはそれほど難しいことではないようです。何か案は?

4

3 に答える 3

2

これは、カラーバーを画像と同じ高さにするため、make_axes_locatableからの関数を使用したかなり単純な解決策です。mpl_toolkits.axes_grid1さらに、カラーバーの配置、幅、およびパディングを に対して設定するのは非常に簡単Axesです。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib import cm
from numpy.random import randn

# Make plot with vertical (default) colorbar
fig = plt.figure()
ax = fig.add_subplot(121, aspect='equal')
ax2 = fig.add_subplot(122, aspect='equal')
ax2.axis('off')
divider = make_axes_locatable(ax)

# Specify placement, width and padding of colorbar
cax = divider.append_axes("right", size="10%", pad=0.1)

data = np.clip(randn(250, 250), -1, 1)

im = ax.imshow(data, interpolation='nearest', cmap=cm.coolwarm)
ax.set_title('Title')

# Add colorbar, make sure to specify tick locations to match desired ticklabels
cbar = fig.colorbar(im, cax=cax, ticks=[-1, 0, 1])
cbar.ax.set_yticklabels(['< -1', '0', '> 1'])# vertically oriented colorbar

# Add text
boxtext = \
"""Text box
Second line
Third line"""

props = dict(boxstyle='round, pad=1', facecolor='white', edgecolor='black')
ax2.text(0.15, 0.85, boxtext, ha='left', va='top', transform=ax2.transAxes, bbox=props)

#plt.tight_layout()
plt.savefig(r'D:\image.png', bbox_inches='tight', dpi=150)

ここに画像の説明を入力

于 2013-06-12T20:14:06.400 に答える
1

これが私が行っていることです:

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
from numpy.random import randn
import pickle

data  = np.clip(randn(250, 250), -1, 1)

fig3 = plt.figure()

ax1 = fig3.add_axes([.1,.1,.55,.8])
ax2 = fig3.add_axes([.7,.1,.05,.8])
ax3 = fig3.add_axes([.78,.1,.1,.8])
ax3.axis('off')

hm = ax1.pcolor(data, cmap=cm.coolwarm) 

plt.colorbar(hm,cax = ax2)

bbox_args = dict(boxstyle='square',facecolor='white')
ann = ax3.annotate('More info here', xy=(.2,.8),
              xytext=(.2,.8), transform=ax3.transAxes, bbox=bbox_args)

plt.show()

結果は次のとおりです。

上記のコードからのプロット例

これが提供された他の回答よりも優れているというわけではありませんが(非常に感謝しています!)、理解でき(!)、非常に簡単に微調整できます。私は自分の答えを選択するつもりはありません. (特に、axis('off') について知らなかったし、独自の軸オブジェクトにカラーバーを配置することを考えていませんでした。私は初心者だと言いましたか?)

于 2013-06-12T22:58:30.473 に答える