Group:
In [1]:
    
# Third-party
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['axes.titlesize'] = 26
plt.rcParams['axes.labelsize'] = 22
plt.rcParams['xtick.labelsize'] = 18
plt.rcParams['ytick.labelsize'] = 18
%matplotlib inline
from isochrones.mist import MISTModelGrid
    
In [2]:
    
grid = MISTModelGrid(['J', 'H', 'Ks'])
    
In [3]:
    
fig,ax = plt.subplots(1, 1, figsize=(7,6))
iso = grid.df[(grid.df['feh'] >= -1.5) & (grid.df['feh'] <= 1) & (grid.df['log10_isochrone_age_yr'] == 10)]
c = ax.scatter(iso['J']-iso['Ks'], iso['J'], c=iso['feh'])
cb = fig.colorbar(c)
cb.set_label(r'$[{\rm Fe}/{\rm H}]$')
ax.xaxis.set_ticks(np.arange(-0.2, 1.2+0.1, 0.2))
ax.axvline(0.45, alpha=0.1)
ax.set_xlim(-0.21, 1.21)
ax.set_ylim(6, -6)
ax.set_xlabel('$J-K_s$')
ax.set_ylabel('$M_J$')
    
    Out[3]:
    
Problems with this initial figure:
In [9]:
    
from matplotlib.colors import Normalize, ListedColormap
    
In [10]:
    
iso = grid.df[(grid.df['feh'] >= -2) & (grid.df['feh'] <= 1) & 
              (grid.df['log10_isochrone_age_yr'] == 10) & (grid.df['phase'] < 6)]
fehs = np.unique(iso['feh'])
norm = Normalize(vmin=-2., vmax=0.5)
    
In [11]:
    
coolwarm = plt.get_cmap('coolwarm')
coolwarm_colors = coolwarm(np.linspace(0, 1, 256))
colors = (coolwarm_colors[:100][::1].tolist() + 
          [[0.8, 0.8, 0.8, 1.]] + 
          coolwarm_colors[-50:][::2].tolist())
    
In [12]:
    
mod_coolwarm = ListedColormap(colors, name='modified_coolwarm')
cmap = mod_coolwarm
    
In [13]:
    
fig = plt.figure(figsize=(6,6))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
for feh in fehs:
    # if feh == 0: continue
        
    feh_iso = iso[iso['feh'] == feh]
    
    under_iso = feh_iso #[feh_iso['phase'] != 2]
    c = ax.plot(under_iso['J']-under_iso['Ks'], under_iso['J'], linewidth=2.,
                marker='None', linestyle='-', color=cmap(norm(feh)), alpha=0.25)
    
    # phase = 3 is core-helium burning
    HB_feh_iso = feh_iso[feh_iso['phase'] == 3]
    idx = np.array(HB_feh_iso['J']).argmax()
    c = ax.plot((HB_feh_iso['J']-HB_feh_iso['Ks']).iloc[idx], HB_feh_iso['J'].iloc[idx], 
                marker='o', linestyle='none', color=cmap(norm(feh)), 
                markersize=10, markeredgecolor='k', markeredgewidth=1)
ax.xaxis.set_ticks(np.arange(-0.2, 1.2+0.1, 0.2))
ax_cb = fig.add_axes([0.1, 0.94, 0.8, 0.04])
cb = mpl.colorbar.ColorbarBase(ax_cb, cmap=cmap, norm=norm,
                               orientation='horizontal')
cb.set_label('[Fe/H]', labelpad=20, fontsize=18)
ax_cb.xaxis.set_ticks_position('top')
ax_cb.xaxis.set_label_position('top')
ax.set_xlim(0.1, 1.1)
ax.set_ylim(6, -6)
ax.set_xlabel('$J-K_s$')
ax.set_ylabel('$M_J$')
fig.set_facecolor('w')