这似乎是一个相当简单的问题,但我是 Python 新手,我正在努力解决它。我有一个从两个 numpy 数组(大约 25,000 条信息)生成的散点图/热图。y 轴直接取自一个数组,x 轴由两个数组的简单减法运算生成。
我现在需要做的是对数据进行切片,以便我可以使用属于绘图上某些参数的选择。例如,我需要提取所有落在平行四边形内的点:
我可以使用简单的不等式切出一个矩形(请参阅下面的索引和) 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()
就像我说的,我是 Python 的新手,所以解释的术语越少,我就越有可能实现它。感谢您提供的任何帮助。