Create an unplaced population

Simple example showing how to create an unplaced axon population with NRV and plot an histogram of the diameters values. In this example population are either created:

See also

Users’ guide

from nrv.utils import geom
from nrv.nmod._axon_population import axon_population

import matplotlib.pyplot as plt
import numpy as np
from pandas import DataFrame

Generate population from data

n_ax = 10
# Randomly generate axon types and diameters
ax_type = np.random.randint(0,2,n_ax)
ax_diameters = np.random.random(n_ax)*20

When data are in a tupple

pop_tup = axon_population()
pop_tup.create_population_from_data((ax_type, ax_diameters))
pop_tup.axon_pop
types diameters
0 1 6.489142
1 0 19.217062
2 1 16.397210
3 0 4.385401
4 1 9.857501
5 1 8.117392
6 0 13.212963
7 0 17.252671
8 0 1.136180
9 1 5.225056


When data are in a np.ndarray

data = np.vstack((ax_type, ax_diameters))
pop_np = axon_population()
pop_np.create_population_from_data(data)
pop_np.axon_pop
types diameters
0 1.0 6.489142
1 0.0 19.217062
2 1.0 16.397210
3 0.0 4.385401
4 1.0 9.857501
5 1.0 8.117392
6 0.0 13.212963
7 0.0 17.252671
8 0.0 1.136180
9 1.0 5.225056


When data are in a dict

data = {"types":ax_type, "diameters":ax_diameters, "other_key":0}
pop_dict = axon_population()
pop_dict.create_population_from_data(data)
pop_dict.axon_pop
types diameters
0 1 6.489142
1 0 19.217062
2 1 16.397210
3 0 4.385401
4 1 9.857501
5 1 8.117392
6 0 13.212963
7 0 17.252671
8 0 1.136180
9 1 5.225056


When data are in a dataframe

data = DataFrame({"types":ax_type, "diameters":ax_diameters, "other_key":np.random.rand(len(ax_type))})
pop_df = axon_population()
pop_df.create_population_from_data(data)
pop_df.axon_pop
types diameters
0 1 6.489142
1 0 19.217062
2 1 16.397210
3 0 4.385401
4 1 9.857501
5 1 8.117392
6 0 13.212963
7 0 17.252671
8 0 1.136180
9 1 5.225056


Generate population from data

Small 20-axons population

n_ax = 20

pop_stat = axon_population()
pop_stat.create_population_from_stat(n_ax=n_ax)
pop_stat.axon_pop
types diameters
0 1.0 3.779559
1 0.0 1.436673
2 0.0 1.384369
3 0.0 1.117034
4 0.0 1.268136
5 1.0 7.168337
6 0.0 1.936473
7 0.0 1.581964
8 0.0 1.285571
9 0.0 2.442084
10 0.0 1.082164
11 1.0 3.208417
12 1.0 3.436874
13 0.0 0.867134
14 0.0 2.105010
15 0.0 0.669539
16 1.0 3.246493
17 0.0 1.767936
18 0.0 1.529659
19 1.0 7.282565


Histograms

fig, axs = plt.subplots(2, 2,  layout="constrained")
for _i, n_ax in enumerate([20, 200, 2000, 20000]):
    ax = axs[_i%2, _i//2]
    pop_stat = axon_population()
    pop_stat.create_population_from_stat(n_ax=n_ax)
    pop_stat.hist(axes=ax, unmyel_color=("r",.4), myel_color=("b",.4), bins=50)
    ax.set_title(f"{n_ax} axons population")
    ax.set_xlabel("diameter")
    ax.set_ylabel("axons number")

plt.show()
20 axons population, 2000 axons population, 200 axons population, 20000 axons population

Total running time of the script: (0 minutes 1.129 seconds)