# List of `RatInABox` plotting functions:
In this markdown we describe teh plotting functions available with `RatInABox`. The following definitions hold:
* `Env`: a 2D `Environment()` class with a wall and solid boundary conditions
* `Env1D`: a 1D `Environment()` class with periodic boundary conditions
# `Environment`
## `Environment.plot_environment()`
Displays the environment. Works for both 1 or 2D environments.
Examples:
* `Env.plot_environment()`
# `Agent`
## `Agent.plot_trajectory()`
Plots the agent trajectory. Works for 1 or 2D.
* `Ag.plot_trajectory(t_end=120)`
* `Ag1D.plot_trajectory(t_end=120)`
## `Agent.animate_trajectory()`
Makes an animation of the agents trajectory.
## `Agent.plot_position_heatmap()`
Plots a heatmap of the Agents past locations (2D and 1D example shown)
## `Agent.plot_histogram_of_speeds()`
## `Agent.plot_histogram_of_rotational_velocities()`
# `Neurons`
## `Neurons.plot_rate_timeseries()`
Plots a timeseries of the firing rates
## `Neurons.plot_rate_timeseries(imshow=True)`
Plots a timeseries of the firing rates as an image
Plots a timeseries of the firing rates
## `Neurons.animate_rate_timeseries()`
Makes an animation of the firing rates timeseries
## `Neurons.plot_rate_map()`
Depending on the parameters passed this function will either
1. Analytically calculate the rate map (`method = 'analytic'`),
2. Infer the rate map from past activity (`method = 'history'`) or
3. Plot the observed spikes (`spikes=True`).
As an example here we show this function for a set of 3 (two dimensional) grid cells and 10 (one-dimensional) place cells.
* `Neurons.plot_rate_map(method=`analytic`)
* `Neurons.plot_rate_map(method=`history`)
* `Neurons.plot_rate_map(method=`neither`, spikes=True)
## `PlaceCells.plot_place_cell_locations()`
Scatters where the place cells are centres
## `BoundaryVectorCells.plot_BVC_receptive_field()`
# Other details:
* All plotting functions return a tuple (`fig`, `ax`) of `matplotlib` figure objects.
* Most plotting functions support being passed `fig` and `ax` and will plot whatever it is they plot ontop of that. This means we can make:
1. Layered figures (e.g. plot a trajectory on top of a rate map):
```python
fig, ax = Neurons.plot_rate_map(chosen_neuron="1")
fig, ax = Ag.plot_trajectory(fig=fig, ax=ax)
```
2. Multipanel figures:
```python
fig, axes = plt.subplots(1,5,figsize=(20,4))
Ag.plot_trajectory(fig=fig,ax=axes[0])
Neurons.plot_rate_map(fig=fig,ax=[axes[1],axes[2],axes[3]],chosen_neurons='3') #<-- to plot more than 1 neuron pass an array of axes
Neurons.plot_rate_timeseries(fig=fig,ax=axes[4])
```
* For rate maps and timeseries' by default **all** the cells will be plotted. This may take a long time if the number of cells is large. Control this with the `chosen_neurons` argument
* We use the `matplotlib` wrapper [`tomplotlib`](https://github.com/RatInABox-Lab/tomplotlib) to format and save figures. This is not necesary for the workings of `ratinabox` but note your figures might look slightly different without it.