123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """Plot a profile of the radial density"""
- import matplotlib.pyplot as plt
- import numpy as np
- from analysis import utils
- def plotRadialDensity(data):
- """Plots a profile of the radial density, divided into components.
- Parameters:
- data: a data dictionary in the format saved by the simulation
- """
- f, ax = plt.subplots(1, 1)
- # We measure the radial distance from the Center Of Mass
- COM = np.sum(data['r_vec'] * data['mass'][:,np.newaxis], axis=0) / np.sum(data['mass'])
- r = np.linalg.norm((data['r'] - COM), axis=-1)
- # Divide the particles into groups
- diskMask = data['types'][:,1] == 'disk'
- bulgeMask = data['types'][:,1] == 'bulge'
- luminousMask = np.logical_or(diskMask, bulgeMask)
- darkMask = data['types'][:,1] == 'dark'
- # Plot each group separately
- style = {'histtype':'step', 'cumulative':True, 'bins':np.logspace(-2, 2, 1000),
- 'color':'black', 'linestyle':'dashed', 'label':'disk'}
- plt.hist(r[diskMask], weights=data['mass'][diskMask],
- label='disk', **style)
- plt.hist(r[bulgeMask], weights=data['mass'][bulgeMask],
- label='bulge', **style)
- plt.hist(r[luminousMask], weights=data['mass'][luminousMask],
- label='luminous', **style)
- plt.hist(r[darkMask], weights=data['mass'][darkMask],
- label='dark', **style)
-
- # Plotting styling
- plt.legend(loc='upper left')
- plt.yscale('log'); plt.xscale('log')
- utils.setAxes(ax, x=(3E-2, 1E2), y=(1E-2, 2))
- utils.setAxes(ax, x=r'$r$', y=r'Cumulative mass',
- xcoords=(.9,-0.08), ycoords=(-0.1,.7))
- utils.stylizePlot([ax])
- plt.show()
-
- data = utils.loadData('hyperbolic_halo', 30000)
- plotRadialDensity(data)
|