trident.spectrum_generator.plot_spectrum
- trident.spectrum_generator.plot_spectrum(wavelength, flux, filename='spectrum.png', lambda_limits=None, flux_limits=None, title=None, label=None, figsize=None, step=False, stagger=0.2, features=None, axis_labels=None)[source]
Plot a spectrum or a collection of spectra and save to disk.
This function wraps some Matplotlib plotting functionality for plotting spectra generated with the
SpectrumGenerator
. In its simplest form, it accepts a wavelength array consisting of wavelength values and a corresponding flux array consisting of relative flux values, and it plots them and saves to disk.In addition, it can plot several spectra on the same axes simultaneously by passing a list of arrays to the
wavelength
,flux
arguments (and optionally to thelabel
andstep
keywords).Returns the Matplotlib Figure object for further processing.
Parameters
- Wavelength
array of floats or list of arrays of floats
Wavelength values in angstroms. Either as an array of floats in the case of plotting a single spectrum, or as a list of arrays of floats in the case of plotting several spectra on the same axes.
- Flux
array of floats or list of arrays of floats
Relative flux values (from 0 to 1) corresponding to wavelength array. Either as an array of floats in the case of plotting a single spectrum, or as a list of arrays of floats in the case of plotting several spectra on the same axes.
- Filename
string, optional
Output filename of the plotted spectrum. Will be a png file. Default: ‘spectrum.png’
- Lambda_limits
tuple or list of floats, optional
The minimum and maximum of the wavelength range (x-axis) for the plot in angstroms. If specified as None, will use whole lambda range of spectrum. Example: (1200, 1400) for 1200-1400 Angstroms Default: None
- Flux_limits
tuple or list of floats, optional
The minimum and maximum of the flux range (y-axis) for the plot. If specified as None, limits are automatically from [0, 1.1*max(flux)]. Example: (0, 1) for normal flux range before postprocessing. Default: None
- Step
boolean or list of booleans, optional
Plot the spectrum as a series of step functions. Appropriate for plotting processed and noisy data. Use a list of booleans when plotting multiple spectra, where each boolean corresponds to the entry in the
wavelength
andflux
lists.- Title
string, optional
Optional title for plot Default: None
- Label
string or list of strings, optional
Label for each spectrum to be plotted. Useful if plotting multiple spectra simultaneously. Will automatically trigger a legend to be generated. Default: None
- Stagger
float, optional
If plotting multiple spectra on the same axes, do we offset them in the y direction? If set to None, no. If set to a float, stagger them by the flux value specified by this parameter.
- Features
dict, optional
Include vertical lines with labels to represent certain spectral features. Each entry in the dictionary consists of a key string to be overplot and the value float as to where in wavelength space it will be plot as a vertical line with the corresponding label.
Example: features={‘Ly a’ : 1216, ‘Ly b’ : 1026}
Default: None
- Axis_labels
tuple of strings, optional
Optionally set the axis labels directly. If set to None, defaults to (‘Wavelength [$rmAA$]’, ‘Relative Flux’). Default: None
Returns
Matplotlib Figure object for further processing
Example
Plot a flat spectrum
>>> import numpy as np >>> import trident >>> wavelength = np.arange(1200, 1400) >>> flux = np.ones(len(wavelength)) >>> trident.plot_spectrum(wavelength, flux)
Generate a one-zone ray, create a Lyman alpha spectrum from it, and add gaussian noise to it. Plot both the raw spectrum and the noisy spectrum on top of each other.
>>> import trident >>> ray = trident.make_onezone_ray(column_densities={'H_p0_number_density':1e21}) >>> sg_final = trident.SpectrumGenerator(lambda_min=1200, lambda_max=1300, dlambda=0.5) >>> sg_final.make_spectrum(ray, lines=['Ly a']) >>> sg_final.save_spectrum('spec_raw.h5') >>> sg_final.add_gaussian_noise(10) >>> sg_raw = trident.load_spectrum('spec_raw.h5') >>> trident.plot_spectrum([sg_raw.lambda_field, sg_final.lambda_field], ... [sg_raw.flux_field, sg_final.flux_field], stagger=0, step=[False, True], ... label=['Raw', 'Noisy'], filename='raw_and_noise.png')