Skip to main content

Rendering anatomical heatmaps with brainrender and matplotlib

Project description

brainglobe-heatmap

brainglobe-heatmap allows you to create heatmaps, mapping scalar values for each brain region (e.g., number of labelled cells in each region) to a color and creating beautiful visualizations in 2D (using matplotlib or 3D (using brainrender).

2D heatmap generated using matplotlib

2D heatmap generated using matplotlib

3D heatmap generated using brainrender

3D heatmap generated using brainrender

Installation

pip install brainglobe-heatmap

User guide

The starting point for a heatmap visualization is a dict assigning scalar values to a set of brain regions (identified by their acronym). For example:

    regions = dict(  # scalar values for each region
        TH=1,
        RSP=0.2,
        AI=0.4,
        SS=-3,
        MO=2.6,
        ...
    )

brainglobe-heatmap creates a brainrender 3D Scene with the given regions colored according the values in the dictionary. Next, to create visualizations like the ones shown above, the three dimensional scene needs to be sliced to expose the relevant parts. This is done by specifying the position and orientation of a Plane which cuts through the scene.

The orientation is set by the direction of a normal vector specified by the user.

Everything that is on the side opposite where the normal vector will be cut and discarded. To keep a section of the 3D brain, two planes with normal vectors facing in opposite directions are used:

and everything in-between the two planes is kept as a slice.

Slicing plane position

Finding the right position and orientation to the plane can take some tweaking. brainglobe-heatmap provides a planner class that makes the process easier by showing the position of the planes and how they intersect with the user provided regions (see image above). In examples/plan.py there's an example showing how to use the planner:

import brainglobe_heatmap as bgh


planner = bgh.plan(
    regions,
    position=(
        8000,
        5000,
        5000,
    ),
    orientation="frontal",  # orientation, or 'sagittal', or 'horizontal' or a tuple (x,y,z)
    thickness=2000,  # thickness of the slices used for rendering (in microns)
)

The position of the center of the plane is given by a set of (x, y, z) coordinates. The orientation can be specified by a string (frontal, sagittal, horizontal) which will result in a standard orthogonal slice, or by a vector (x, y, z) with the orientation along the 3 axes.

Whe using one of the named orientation, you don't need to pass a whole set of (x, y, z) coordinates for the plane center. A single value is sufficient as the other two won't affect the plane position:

f = bgh.heatmap(
    values,
    position=1000,
    orientation="sagittal",  # 'frontal' or 'sagittal', or 'horizontal' or a tuple (x,y,z)
    thickness=1000,
    atlas_name="allen_cord_20um",
    format='2D',
).show()

Also, you can create a slice with a plane centered in the brain by passing position=None:

f = bgh.heatmap(
    values,
    position=None,
    orientation="sagittal",  # 'frontal' or 'sagittal', or 'horizontal' or a tuple (x,y,z)
    thickness=1000,
    atlas_name="mpin_zfish_1um",
    format='2D',
    title='zebra fish heatmap'
).show(xlabel='AP (μm)', ylabel='DV (μm)')

Visualization

Once happy with the position of the slicing planes, creating a visualization is as simple as:

bgh.heatmap(
    values,
    position=(
        8000,
        5000,
        5000,
    ),
    orientation="horizontal",  # 'frontal' or 'sagittal', or 'horizontal' or a tuple (x,y,z)
    title="horizontal view",
    vmin=-5,
    vmax=3,
    cmap='Red',
    format="2D",
).show()

Here, format specifies if a 2D plot should be made (using matplotlib) or a 3D rendering instead (using brainrender). The cmap parameter specifies the colormap used and vmin, vmax the color range.

Regions coordinates

You can use brainglobe-heatmap to get the coordinates of the 2D 'slices' (in the 2D plane's coordinates system):

regions = ['TH', 'RSP', 'AI', 'SS', 'MO', 'PVZ', 'LZ', 'VIS', 'AUD', 'RHP', 'STR', 'CB', 'FRP', 'HIP', 'PA']


coordinates = bgh.get_plane_coordinates(
    regions,
    position=(
        8000,
        5000,
        5000,
    ),
    orientation="frontal",  # 'frontal' or 'sagittal', or 'horizontal' or a tuple (x,y,z)
)

Using brainglobe-heatmap with other atlases.

brainglobe-heatmap uses brainrender which, in turn, uses brainglobe's Atlas API under the hood. That means that all of brainglobe-heatmap's functionality is compatible with any of the atlases supported by the atlas API. bgh.heatmap, bgh.planner and bgh.get_plane_coordinates all accept a atlas_name argument, pass the name of the atlas name you'd like to use! For more information see the API's documentation.

Contributing

Contributions to brainglobe-heatmap are more than welcome. Please see the Developer's guide.

Citing brainglobe-heatmap

If you use brainglobe-heatmap in your work, please cite it as:

Federico Claudi, & Luigi Petrucco. (2022). brainglobe/bg-heatmaps: (V0.2). Zenodo. https://doi.org/10.5281/zenodo.5891814

brainglobe-heatmap was originally developed by Federico Claudi and Luigi Petrucco, with the help of Marco Musy (the developer of vedo)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

brainglobe-heatmap-0.5.2.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

brainglobe_heatmap-0.5.2-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file brainglobe-heatmap-0.5.2.tar.gz.

File metadata

  • Download URL: brainglobe-heatmap-0.5.2.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for brainglobe-heatmap-0.5.2.tar.gz
Algorithm Hash digest
SHA256 1366ff943ee9e199ae3190e9583d3c372779cdba7142cabf9b5bf67a20eaa0d4
MD5 7120c467c4a750aa6e2e303081fe3866
BLAKE2b-256 ce1a656028f0c0da45beed6e43b66ef285dd1d2d340c031a84da6a87be59c4dc

See more details on using hashes here.

Provenance

File details

Details for the file brainglobe_heatmap-0.5.2-py3-none-any.whl.

File metadata

File hashes

Hashes for brainglobe_heatmap-0.5.2-py3-none-any.whl
Algorithm Hash digest
SHA256 65c122bbf3f95a09870984a38d7fd8b4f9dfe332319e26bf006b2e84b516f24e
MD5 c7645720ae4bc206271bc64b5d77f35a
BLAKE2b-256 9cbeba25a777c26d2f8a6e56d70190a0db86e2388e9b96f7fb3cf984610474e1

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page