问题描述
from astroML.datasets import fetch_sdss_sspp as fetch
import matplotlib.pyplot as plt
data = fetch()
print("Data contains %d objects" % data.shape)
print("Column names are %s" % str(data.dtype.names[:])[1:-1])
data = data[:10000]
rpsf = data['rpsf'] # make some reasonable cuts
data = data[(rpsf > 15) & (rpsf < 19)]
logg = data['logg']
Teff = data['Teff']
blue_branch = data[Teff < 6500]
main_seq = data[Teff >= 6500]
giant = data[(Teff > 6500) & (logg > 3.5)]
ax = plt.axes()
ax.scatter(Teff,logg,s = 1,lw = 0,c = 'r',alpha = 0.9,marker = '.')
ax.set_xlim(8000,4500)
ax.set_ylim(5.1,1)
ax.set_xlabel(r'$\mathrm{T_{eff} [K]}$')
ax.set_ylabel(r'$\mathrm{log_{10}} [g/cm/s^2]}$')
上部羽状体以红色巨人为主,T_eff〜6500右侧为主要序列, 左边的蓝色水平分支星星。
我该如何根据情节在这些区域中的点着色?例如红色代表上部羽流,黄色代表主要序列,蓝色代表蓝色分支?我已经将分支从数据集中切成薄片,但是我不确定如何在不同颜色的相同轴上绘制它们。
解决方法
根据您当前的代码,您可以将scatter
调用更改为以下内容:
ax.scatter(blue_branch['Teff'],blue_branch['logg'],s=1,lw=0,c='b',alpha=0.9,marker='.')
ax.scatter(main_seq['Teff'],main_seq['logg'],c='y',marker='.')
ax.scatter(giant['Teff'],giant['logg'],c='r',marker='.')
通过创建颜色数组并将其填充为三遍而不是创建实际数据的三片,也可以在单个调用中实现相同的效果。切片方法可以在需要时以更直接的方式创建图例。