質問: -2.5 * log10(F_m/F_0) m : F_mに対応する等級 /mag F_m : フラックス /Jy(ジャンスキー) F_0 : AB等級でのVEGAのフラックス(=3630 /Jy) 難題かもしれませんがよろしくお願いいたします。
回答: > > 「フラックスFが元から0であった箇所は真っ黒で、かつ、等級を計算した結果0になったものも含めて等級の値が小さくなると白く、値が大きくなると黒に近づくというカラーバーにしたいです。」 > > > magichanさんの回答のとおりでよいと思うのですが、なぜか当方環境では`inf`が白で描画されるので回避策の提案です。(matplotlibの仕様?) 幸い、元の0は変換後に特殊な値`inf`になるので、変換後の`inf`を黒を表す大きな値に置き換えればよいかと思います。 下記コード中では`VMAX=20`を指定していますが、適宜調整ください。 ``` import numpy as np import matplotlib.pyplot as plt import matplotlib print(matplotlib.__version__) # 2.2.2 x = np.linspace(328,330,3) y = np.linspace(41,43,3) F = 0, 3630, 363, 36.3] X, Y = np.meshgrid(x,y) F = np.array(F).reshape(2,-1) m = -2.5 * np.log10(F/3630) print(m) """ [[ inf -0. ] [ 2.5 5. ]] """ # 元から0(変換後のinf)は最大値(黒)に VMAX = 20 m[m == np.inf] = VMAX fig = plt.figure() ax = fig.add_subplot(111) m = ax.pcolormesh(X, Y, m, cmap='gray_r', vmin=0, vmax=VMAX) fig.colorbar(m, label='A') plt.show() ``` ![イメージ説明