web-dev-qa-db-ja.com

matplotlib散布図の対数カラーバー

散布図の点の色をボイド率の値に対応させたいのですが、違いを増幅するために対数目盛にします。これを行いましたが、plt.colorbar()を実行すると、実際のボイド率が本当に必要なときに、ボイド率のログが表示されます。 [0.00001,1]に属するボイド率の適切なラベルを使用して、カラーバーにログスケールを作成するにはどうすればよいですか?

ここに私が現在持っているプロットの画像がありますが、空隙率のカラーバーは、その対数ではなく、真の空隙率に対応するように適切にラベル付けされていません。

current plot

fig = plt.figure()
plt.scatter(x,y,edgecolors='none',s=marker_size,c=np.log(void_fraction))
plt.colorbar()
plt.title('Colorbar: void fraction')

ご協力いただきありがとうございます。

48
Cokes

現在、ドキュメントのセクションに カラーマッピングと正規化の仕組み (開発ドキュメントへのリンクですが、mplのすべてのバージョンに適用されます。メインラインドキュメント「まもなく」に記載されています。 )

matplotlibがカラーマッピングを行う方法は2段階で、最初にNormalize関数(matplotlib.colors.Normalizeのサブクラスによってラップされます)は、[0, 1]に渡すデータをマッピングします。 2番目の手順では、値を[0,1]-> RGBA空間にマッピングします。

LogNorm kwargで渡されるnorm正規化クラスを使用するだけです。

plt.scatter(x,y,edgecolors='none',s=marker_size,c=void_fraction,
                norm=matplotlib.colors.LogNorm())

プロット用にデータをスケーリング/微調整する場合は、自分で行うよりもmatplotlibで変換を行う方が適切です。

62
tacaswell