5

これはかなり単純な問題のように思えますが、私は Python を初めて使用するので、解決に苦労しています。2 つの numpy 配列 (約 25,000 の情報) から生成された散布図/ヒートマップがあります。y 軸は配列から直接取得され、x 軸は 2 つの配列の単純な減算操作から生成されます。

ここで行う必要があるのは、データをスライスして、プロットの特定のパラメーター内に収まる選択を操作できるようにすることです。たとえば、平行四辺形内にあるすべての点を抽出する必要があります。 ここに画像の説明を入力

単純な不等式を使用して長方形を切り取ることはできますが (以下のインデックスidx_cidx_hおよびidxを参照)、より複雑なジオメトリを使用してポイントを選択する方法が本当に必要です。このスライスは、ポリゴンの頂点を指定することでできるようです。これは私が見つけることができる解決策に最も近いものですが、それを実装する方法がわかりません:

http://matplotlib.org/api/nxutils_api.html#matplotlib.nxutils.points_inside_poly

理想的には、以下のインデックスに似たもの、つまり のようなものが本当に必要ですcolorjh[idx]。最終的には、さまざまな量 ( colorjh[idx]vsなどcolorhk[idx]) をプロットする必要があるため、データセット内のすべての配列 (多数の配列) にインデックスを転送できる必要があります。それは明らかかもしれませんが、それほど柔軟ではないソリューションがあると思います。つまり、このプロットを使用して関心のあるポイントを選択し、同じテーブルの他の配列で機能するためにそれらのインデックスが必要になります。

ここに私が取り組んでいるコードがあります:

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('/IRSA_downloads/2MASS_GCbox1.tbl')

hmag = list([twomass['h_m']])
jmag = list([twomass['j_m']])
kmag = list([twomass['k_m']])

hmag = np.array(hmag)
jmag = np.array(jmag)
kmag = np.array(kmag)

colorjh = np.array(jmag - hmag)
colorhk = np.array(hmag - kmag)

idx_c = (colorjh > -1.01) & (colorjh < 6)  #manipulate x-axis slicing here here
idx_h = (hmag > 0) & (hmag < 17.01)        #manipulate y-axis slicing here
idx = idx_c & idx_h

# heatmap below
heatmap, xedges, yedges = np.histogram2d(hmag[idx], colorjh[idx], bins=200)
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]
plt.clf()
plt.imshow(heatmap, extent=extent, aspect=0.65)

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

plt.gca().invert_yaxis()       #I put this in to recover familiar axis orientation

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

plt.show()

私が言うように、私は Python を初めて使用するので、専門用語の説明が少ないほど、実装できる可能性が高くなります。皆様のご協力に感謝いたします。

4

1 に答える 1