2017-05-01 86 views
1

の上から下への移行:カラーバーoffsetText(科学的なベース乗数)カラーバー

(絵に示されている)カラーバーでmatplotlibの中では、私がoffsetText移動する必要があります(ベース乗数)をカラーバーの上から下に移動します。

私はこのプロットのために使用しているコードは(gridspecを使用して)です:事前に

f.add_subplot(ax12) 

ax10 = plt.Subplot(f, gs00[1, 0]) 
cb = plt.colorbar(h3,cax=ax10) 
cb.formatter.set_scientific(True) 
cb.formatter.set_powerlimits((0,0)) 
cb.ax.yaxis.offsetText.set(size=6) 
cb.update_ticks() 

ax10.yaxis.set_ticks_position('left') 
ax10.tick_params(labelsize=6) 
f.add_subplot(ax10) 

ありがとう! (ところで、Pythonのバージョン= 2.7.6、matplotlibのバージョン= 1.3.1 - 現在アップグレードしないオプション私は現在のプロジェクトを完了するまで)

enter image description here

+0

あなたのコードのどの部分から来て、「1E5」とは? – blubberdiblub

+0

私は散布図を作成しています。ここでは、値がカラーマップとして表示される別の配列を使用しています。その配列は事実上1e3から1e6(通常は)の値を持ちます。 コード: h3 = ax12.scatter(x [j]、y [j]、c = temp [j]、マーカー= '。'、s = 10.0、cmap = 'hot'、edgecolors = 'none') h3はplt.colorbarに渡され、値はtemp []配列になります。 –

答えて

1

通常、offsetTextラベルの位置を変更することはできません。これはまだopen issueです。

解決策は、yaxis '_update_offset_text_positionメソッドを上書きして、offsetTextをyaxisの下部に配置することです。

import matplotlib.pyplot as plt 
import types 

def bottom_offset(self, bboxes, bboxes2): 
    bottom = self.axes.bbox.ymin 
    self.offsetText.set(va="top", ha="left") 
    self.offsetText.set_position(
      (0, bottom - self.OFFSETTEXTPAD * self.figure.dpi/72.0)) 

fig, ax = plt.subplots() 
im = ax.imshow([[1e5,2e5],[0.1e5,1e5]]) 
cb = plt.colorbar(im) 
cb.formatter.set_scientific(True) 
cb.formatter.set_powerlimits((0,0)) 

def register_bottom_offset(axis, func): 
    axis._update_offset_text_position = types.MethodType(func, axis) 
register_bottom_offset(cb.ax.yaxis, bottom_offset) 

cb.update_ticks() 

plt.show() 

enter image description here

カラーバーは、次がよく見えるかもしれないプロットの左側に配置されている場合:

self.offsetText.set(va="top", ha="right") 
self.offsetText.set_position(
      (1, bottom - self.OFFSETTEXTPAD * self.figure.dpi/72.0)) 
+0

これは単に手動でテキストラベルを置くよりももっと洗練された解決策であるかどうかはわかりませんが、 – ImportanceOfBeingErnest

+0

エレガントなことは分かりませんが、あなたの答えは明らかに洞察力があり、本質にぶつかります。今私はそこに何が起こっているのか知っています。あなたの答えを受け入れました。ありがとうございました! –

2

うーん...どうやら、それはカラーバーのを移動することはできません科学的ベース乗数を上下に、ちょっと左または右にします。

回避策は、それを隠し、ちょうど(私の場合は)底部に配置されます(同じ)カスタムテキストを追加するには、次のようになります。

cb.ax.yaxis.get_offset_text().set_visible(False) 
    cb.ax.text(0.5, -0.1, '1e4', va='bottom', ha='center', size=6) 

誰かがよりエレガントな解決策を持っている場合は、私はに幸せになりますそれを見て!