def side_hist(ax, data, cdata, bins=50, cols=None, binsx=True, discrete=False, cbins=10): """ Add a histogram of data to ax made from inds of unique values of cdata """ if discrete: if type(cbins) == int: hist, cbins = np.histogram(cdata, bins=cbins) dinds = np.digitize(cdata, cbins) uinds = range(len(cbins)) else: uinds = np.unique(cdata) dinds = np.digitize(cdata, uinds) cols = palettable.get_map('Spectral', 'Diverging', len(uinds)).mpl_colors for j, i in enumerate(uinds): hist, hbins = np.histogram(data[dinds == i], bins=bins) if binsx: x = hbins[1:] y = hist else: y = hbins[1:] x = hist ax.plot(x, y, linestyle='steps-pre', color=cols[j], zorder=100-j) return ax
import os import ResolvedStellarPops as rsp import matplotlib.pyplot as plt import palettable galfile = '/Users/phil/research/BRratio/models/TRILEGAL_RUNS/big_galaxy/output_big_galaxy_wfpc2_z0.001.dat' sgal = rsp.Galaxies.simgalaxy(galfile, filter1='F555W', filter2='F814W') bmap = palettable.get_map('Paired', map_type='Qualitative', number=7) ages = np.array([50e6, 100e6, 500e6, 1e9, 2e9, 5e9, 10e9]) lages = np.log10(ages) lage = sgal.data.get_col('logAge') inds = np.digitize(lage, lages) xlim = (-1, 4.5) ylim = (.1, -7.5) plot_args = {'mew': 0} fig = plt.figure(figsize=(8, 8)) ax = plt.axes() for j, i in enumerate(np.unique(inds)): if i == len(ages): continue plot_args['color'] = bmap.mpl_colors[j] slice_inds, = np.nonzero(inds == i) sgal.plot_cmd(sgal.Color, sgal.Mag2, slice_inds=slice_inds, fig=fig, ax=ax, scatter_off=True, xlim=xlim, ylim=ylim, plot_args=plot_args) plt.savefig('cmd_%i.png' % (j+1))
def scatter_hist(starpop, xdata, ydata, coldata='stage', xbins=50, ybins=50, slice_inds=None, xlim=None, ylim=None, clim=None, discrete=False, scatter_kw={}): """ """ import palettable import matplotlib.gridspec as gridspec def side_hist(ax, data, cdata, bins=50, cols=None, binsx=True, discrete=False, cbins=10): """ Add a histogram of data to ax made from inds of unique values of cdata """ if discrete: if type(cbins) == int: hist, cbins = np.histogram(cdata, bins=cbins) dinds = np.digitize(cdata, cbins) uinds = range(len(cbins)) else: uinds = np.unique(cdata) dinds = np.digitize(cdata, uinds) cols = palettable.get_map('Spectral', 'Diverging', len(uinds)).mpl_colors for j, i in enumerate(uinds): hist, hbins = np.histogram(data[dinds == i], bins=bins) if binsx: x = hbins[1:] y = hist else: y = hbins[1:] x = hist ax.plot(x, y, linestyle='steps-pre', color=cols[j], zorder=100-j) return ax fig = plt.figure(figsize=(11, 7)) gs = gridspec.GridSpec(3, 3) axt = plt.subplot(gs[0,:-1]) axr = plt.subplot(gs[1:,-1]) ax = plt.subplot(gs[1:,:-1]) if type(xdata) is str: ax.set_xlabel(xdata.replace('_', '\_')) xdata = starpop.data[xdata] if type(ydata) is str: ax.set_ylabel(ydata.replace('_', '\_')) ydata = starpop.data[ydata] collabel = None if type(coldata) is str: collabel = coldata.replace('_', '\_') coldata = starpop.data[coldata] if slice_inds is not None: xdata = xdata[slice_inds] ydata = ydata[slice_inds] coldata = coldata[slice_inds] scatter_kw = dict({'edgecolors': 'none', 'cmap': plt.cm.Spectral}.items() \ + scatter_kw.items()) l = ax.scatter(xdata, ydata, c=coldata, **scatter_kw) axt = side_hist(axt, xdata, coldata, bins=xbins, discrete=discrete) axr = side_hist(axr, ydata, coldata, bins=ybins, binsx=False, discrete=discrete) axt.set_yscale('log') axr.set_xscale('log') if xlim is not None: axt.set_xlim(xlim) ax.set_xlim(axt.get_xlim()) if ylim is not None: axr.set_ylim(ylim) ax.set_ylim(axr.get_ylim()) if clim is not None: l.set_clim(clim) axt.set_ylabel('$\#$') axr.set_xlabel('$\#$') axt.tick_params(labelbottom=False, labeltop=True, right=False) axr.tick_params(labelright=True, labelleft=False, top=False) gs.update(left=0.1, right=0.9, wspace=0, hspace=0) if collabel == 'stage': axtr = plt.subplot(gs[0, -1]) cols = palettable.get_map('Spectral', 'Diverging', 9).mpl_colors [axtr.plot(0, 0, label=get_stage_label()[i], color=cols[i]) for i in range(len(cols))] axtr.tick_params(labelbottom=False, labelleft=False) axtr.grid() # should turn it off!! plt.legend(mode='expand', ncol=2, frameon=False) axs = [axt, ax, axr, axtr] else: axs = [axt, ax, axr] return axs