4

これは奇妙なものです。誰かが私を助けてくれることを願っています。matplotlib ヒートマップを使用してデータの密度プロットを実行しようとしていますが、どういうわけか、データが奇妙な方法で反転/回転しています。私は散布図を持っていて、密度のためにそれらのポイントをビニングしていますが、画像はまったく出てくるはずのものではありません。たとえば、正しい向きの元の散布図を次に示します。

元の散布図

次に、これが私のヒートマップです (構造が上から反時計回りに 90 度回転していることに注意してください。ただし、軸のデータは正しいことに注意してください...軸の数値はデータから自動的に生成されるため、軸を逆にするだけで画像が表示されます正しいが、数字はすべてオフです):

ヒートマップの向きは間違っているが、軸は正しい

データ解析ルーチンは、散布図を生成したときと同じであるため、これがどのようになるかわかりません。ヒートマップ プロットがコード化されている方法である必要があると思いますが、内訳がどこにあるのかわかりません。ヒートマップの組み込みの原点配置(左上隅)を考慮してみましたが、解決しません。コードは次のとおりです (最初にすべてのデータを解析します)。

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy
from pylab import *

twomass = atpy.Table()

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox2.tbl')


hmag = list([twomass['h_m']])
jmag = list([twomass['j_m']])
hmag = np.array(hmag)
jmag = np.array(jmag)
colorjh = np.array(jmag - hmag)

idx_c = (colorjh > -1) & (colorjh < 6)  #manipulate desired color quantities here
idx_h = (hmag > 8) & (hmag < 18)
idx = idx_c & idx_h

ヒートマップのコードは次のとおりです。

heatmap, xedges, yedges = np.histogram2d(colorjh[idx], hmag[idx], bins=500)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

plt.clf()
plt.imshow(heatmap, extent=extent)

plt.xlabel('Color(J-H)', fontsize=15)           #adjust axis labels here
plt.ylabel('Magnitude (H)', fontsize=15)

plt.gca().invert_yaxis()

plt.legend(loc=2)
plt.title('CMD for Galactic Center (2MASS)', fontsize=20)
plt.grid(True)
plt.show()

私は Python にかなり慣れていないので、説明の専門用語が少ないほど、Python をうまく活用できる可能性が高くなります。皆様のご協力に感謝いたします。

4

1 に答える 1

7

あなたの問題は、その仕組みにあるようですnp.histogram2dドキュメントから:

ヒストグラムは、 x値が横座標に、y値が縦軸にあるデカルトの慣習に従っていないことに注意してください。むしろ、xは配列の最初の次元 (垂直方向) に沿ってヒストグラム化され、yは配列の 2 番目の次元 (水平方向) に沿ってヒストグラム化されます。これにより、 との互換性が保証されhistogramddます。

使用する

extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]

代わりに、期待どおりの結果が得られるはずです。散布図と同じ向きを維持したい場合は、呼び出しでも反転colorjh[idx]hmag[idx]ます。histogram2d

于 2013-03-29T19:01:53.737 に答える