2016-05-23 10 views
1

サブプロット#1と#2のカラーバーと#3の2番目のカラーバーを並べて3つの疑似カラーサブプロットを並べようとしています。私はまた、色の限界(clim)が最初の2つのものと同じになるように設定したい(最初のカラーバーは両方のサブプロット#1と#2の値を反映するだろう)。Matplotlibのサブプロットに共通のカラーバーを追加してその限界を一緒に変更する方法

は、ここで私がこれまで持っているものです。

import numpy as np 
import matplotlib.pyplot as plt 
plt.ion() 
import matplotlib as mpl 


data1 = np.random.random((10,10)) 
data2 = 2.*np.random.random((10,10)) 
data3 = 3.*np.random.random((10,10)) 


f, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True) 

imgplot1 = ax1.pcolormesh(data1, edgecolors='None') 

imgplot2 = ax2.pcolormesh(data2, edgecolors='None') 

plt.subplots_adjust(hspace=0.1, wspace=0.1) 
cax2, kw = mpl.colorbar.make_axes([ax1, ax2]) 
plt.colorbar(imgplot2, cax=cax2, **kw) 
imgplot2.set_clim(0,20) 

imgplot3 = ax3.pcolormesh(data3, edgecolors='None') 
cax3, kw = mpl.colorbar.make_axes([ax3]) 
plt.colorbar(imgplot3, cax=cax3, **kw) 

imgplot2.set_clim(0,20)は、サブプロット#2を(私はあなたがプロットと対話しない限り、それは常に更新されませんバックエンド依存の問題を見てきましたが)に設定されているが、 1つのカラーバーで両方のプロットを表すことができるように、2つのサブプロットの色制限をリンクする方法はありますか?

更新:明確にするために、私はプロットが既に作成された後にクライムを再調整する機能を探しています。

答えて

0

vminvmaxは、共通のカラーバーでデータを視覚化する軸のpcolormeshの両方の呼び出しで指定します。あなたのケースでは

opts = {'vmin': 0, 'vmax': 20, 'edgecolors': 'none'} 
imgplot1 = ax1.pcolormesh(data1, **opts) 
imgplot2 = ax2.pcolormesh(data2, **opts) 

そしてimgplot2.set_clim(0,20)への呼び出しを取り除きます。 また、同じパラメータを使用してにset_climを呼び出すこともできます。同じ効果があります。

def update_clims(vmin, vmax, axes): 
    for ax in axes: 
     ax.set_clim(vmin, vmax) 

あなたが本当にしたい場合:

この回答下記のコメントに続けて、あなただけのように簡単に両方の軸のclimを更新カスタム関数を呼び出してimgplot2.set_climにあなたの単一の呼び出しを置き換えることができます上記の機能を実行するためにAxesクラスのset_climメソッドを再バインドすることができます。ただし、z-データを共有する軸のリストを追加する必要があります。しかし、これはそうでなければ簡単に機能を実装するための多くの仕事のように思えます。すでに軸のアップデートをclimにもう一度呼び出すと、その呼び出しで簡単に置き換えることができます。

+0

各カラーバーの制限を個別に設定する方法について説明します。私は、2つのプロットの2つの色の制限を一緒にリンクする方法があるのか​​、または1つを変更するたびに両方の色の制限を手動で調整する必要があるかどうかは疑問です。 – user1704042

+0

@ user1704042 'sharex'のようなものは' sharex'に似ていますか?私はあなたの質問からそれを得ていませんでした。私の知る限り、それは存在しません(まだ)。共有された軸の 'clim'を更新するためのイベントハンドラを書くことは、それに対するアプローチですが、' imgplot2.set_clim'へのあなたの単一の呼び出しを同じ機能を呼び出す呼び出しに置き換えるだけではどうですか?最終的な結果は、コアのmpl機能やエンドユーザコードに実装されていても同じです。私はそれが役立つことを願って、人々はしばしば問題の簡単な解決策を見落とします。 –

関連する問題