# 1D plotting functionalities for POSYON GRIDS

We provide a variety of 1D MESA grids plotting functions within POSYDON. We start by loading a grid in a PSyGrid object. The `plot` method supports any POSYDON MESA grid. Here, we will use the `HMS-HMS` grid as an example.

```# to load a grid
from posydon.grids.psygrid import PSyGrid
grid = PSyGrid("/PATH_TO_POSYDON_DATA/HMS-HMS/grid_0.0142_%d.h5")
```

## How to plot one track

### Plot one quantity as a function of another

The properties to plot for a given MESA track (we have chosen the 42nd track in the grid) can be read from `history1`, `history2`, or `binary_history`. For example, to plot the mass evolution of star_1:

```PLOT_PROPERTIES_1 = {
'show_fig' : True,
'close_fig' : True,
'path_to_file': './plots_demo/',
'fname': '1D_age_M1.png',
}

grid.plot(42, 'age', 'star_1_mass', history='binary_history', **PLOT_PROPERTIES_1)
``` If, instead, we would like to plot the evolution of star_1 within a Hertzsprung-Russell diagram:

```PLOT_PROPERTIES_2 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_2['fname'] = '1D_logR_logL.png'

grid.plot(42, 'log_R', 'log_L', history='history1', **PLOT_PROPERTIES_2)
``` ### Plot multiple quantities as a function of one

We can display more properties as a function of another in a subplot like the following examples.

```PLOT_PROPERTIES_4 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_4['fname'] = '1D_age_bin.png'
PLOT_PROPERTIES_4['figsize'] = (4., 8.)

grid.plot(42, 'age', ['star_1_mass', 'star_2_mass', 'binary_separation'], history='binary_history', **PLOT_PROPERTIES_4)
``` ```PLOT_PROPERTIES_3 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_3['fname'] = '1D_logR_logLs.png'
PLOT_PROPERTIES_3['figsize'] = (4., 8.)

grid.plot(42, 'log_R', ['log_LH', 'log_LHe','log_LZ'], history='history1', **PLOT_PROPERTIES_3)
``` ## How to plot many tracks

### Plot one or more quantities as a function of another for multiple tracks

If one wants to compare multiple tracks on the same plot, the indices for all binaries can be provided as a list.

```PLOT_PROPERTIES_5 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_5['fname'] = '1D_multi.png'
PLOT_PROPERTIES_5['legend1D'] = dict(loc='upper right', lines_legend=['42','43', '44'])

grid.plot([42,43,44], 'age', 'binary_separation', history='binary_history', **PLOT_PROPERTIES_5)
``` ## Plot third quantity as a color map

```PLOT_PROPERTIES_6 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_6['fname'] = '1D_color.png'
PLOT_PROPERTIES_6['log10_x'] = True

grid.plot(42, 'binary_separation', 'star_1_mass', 'lg_mstar_dot_1', history='binary_history', **PLOT_PROPERTIES_6)
``` ## Plotting an HR diagram

One can use the `HR` method to display the HR diagram. Note that multiple tracks at once can also be displayed.

```PLOT_PROPERTIES_7 = PLOT_PROPERTIES_1
PLOT_PROPERTIES_7['fname'] = 'HR1.png'

grid.HR(42, history='history1', **PLOT_PROPERTIES_7)
``` The `HR` diagram method has also an option to display the stellar state. Here we show how to reproduce the HR diagram of Fig. 5 in Fragos et al. (2022).

```import numpy as np

grid = PSyGrid("/Volumes/T7/data_phd/POSYDON/data/POSYDON_data/single_HMS/grid_0.0142.h5")

PLOT_PROPERTIES_8 = {
'figsize' : (3.38, 5),
'show_fig' : True,
'close_fig' : True,
'path_to_file': './plots_demo/',
'fname': 'HR2.png',
'xmin' : 3.,
'xmax' : 6.,
'ymin' : -1.5,
'ymax' : 7.,
'const_R_lines' : True,
'legend1D' : {
'loc' : 'upper center',
'bbox_to_anchor' : (0.4, 1.27),
'ncol' : 2,
'prop': {
'size': 6
},
}
}

# chose a subsample of tracks
idx = np.around(np.argsort(grid.initial_values['S1_star_mass']),2)[::8]
idx = list(set(idx)-{10, 82, 128, 166})+[101,14,96,191]

grid.HR(idx, history='history1', states=True, **PLOT_PROPERTIES_8)
``` 