이것은 매우 간단한 문제인 것처럼 보이지만 저는 Python을 처음 사용하기 때문에 문제를 해결하기 위해 고심하고 있습니다. 2 개의 열세 번째 배열 (약 25,000 개의 정보 조각)에서 생성 된 분산 형 플롯/히트 맵이 있습니다. y 축은 배열에서 직접 가져오고 x 축은 두 배열에 대한 간단한 빼기 연산에서 생성됩니다.Numpy Array Matplotlib의 다각형을 사용하여 조각 내기
지금해야 할 일은 플롯의 특정 매개 변수 내에있는 선택 항목으로 작업 할 수 있도록 데이터를 분할하는 것입니다. (아래 색인 idx_c
, idx_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()
, 내가 파이썬에 새로운, 그래서 덜 전문 용어-y는 가능성이 설명은 내가 그것을 구현 할 수 있습니다 : 여기
내가 함께 일하고 있어요 코드입니다 . 다들 도움을 주셔서 감사합니다.
귀하의 질문에,하지만 라인에 대답하지 않는다 : '잡지 = 목록을 ([['m '] twomass]); 'mag = np.array (mag)'는 중간에'list'없이'mag = np.array ([twomass [ 'm']])'조합 될 수 있습니다. 또한,'jmag-hmag'는 이미 배열이 될 것이므로'np.array (jmag-hmag)'를 부를 필요가 없습니다. – askewchan
을 부수적으로 살펴보면, 배열에 대한 걱정이 있다면'np.asarray'가 좋습니다. – tacaswell