Skip to main content

A matplotlib-based library for anatomical visualizations, heatmaps, and body mapping

Project description

MediPlot

A matplotlib-based Python library for anatomical visualizations and medical data mapping.

Create beautiful visualizations using detailed anatomical shapes and templates for medical data, research, and educational purposes.

Multi-anatomy Example

Features

  • 216 Anatomical Shapes: Comprehensive atlas-based shapes for brain, head/neck, liver, and abdomen
  • 6 View Angles: Each anatomical structure available in anterior, posterior, lateral (left/right), superior, and inferior views
  • Detailed Regions: Anatomically accurate regions with proper naming (gyri, sulci, muscles, vessels, etc.)
  • Medical Colormaps: Purpose-built colormaps for clinical data visualization
  • Clinical Charts: Lab panels, vital signs, and patient timelines
  • Built on matplotlib for seamless integration with existing workflows
  • Fully typed for excellent IDE support
  • Python 3.11+ support

Installation

pip install mediplot

For development:

pip install mediplot[dev]

Quick Start

Brain Atlas - Frontal Lobes

import mediplot as mp

brain = mp.OrganMap("brain_frontal_anterior")
brain.fill_dict(
    {
        "left_frontal_pole": 0.9,
        "right_frontal_pole": 0.85,
        "left_superior_frontal_gyrus": 0.7,
        "right_superior_frontal_gyrus": 0.75,
        "left_precentral_gyrus": 0.6,
        "right_precentral_gyrus": 0.65,
    },
    cmap="viridis",
    colorbar_label="Activation Level",
)
brain.save("brain_frontal.png")

Brain Atlas Example

Head & Neck Skeleton

import mediplot as mp

skeleton = mp.OrganMap("head_neck_skeleton_anterior")
skeleton.fill_dict(
    {
        "skull": 0.8,
        "mandible": 0.7,
        "atlas": 0.6,
        "axis": 0.6,
        "cervical3": 0.5,
        "cervical4": 0.5,
        "hyoid": 0.3,
        "sternum": 0.2,
    },
    cmap="bone",
    colorbar_label="Bone Density",
)
skeleton.save("skeleton.png")

Head Neck Skeleton Example

Head & Neck Muscles

import mediplot as mp

muscles = mp.OrganMap("head_neck_muscles_anterior")
muscles.fill_dict(
    {
        "left_temporalis_muscle": 0.8,
        "right_temporalis_muscle": 0.75,
        "left_masseter_muscle": 0.7,
        "right_masseter_muscle": 0.65,
        "left_sternocleidomastoideus_muscle": 0.6,
        "right_sternocleidomastoideus_muscle": 0.55,
    },
    cmap="Reds",
    colorbar_label="Muscle Tension",
)
muscles.save("muscles.png")

Head Neck Muscles Example

Liver Segments

import mediplot as mp

liver = mp.OrganMap("liver_segments_anterior")
liver.fill_dict(
    {
        "liver_segment_i": 0.3,
        "liver_segment_ii": 0.5,
        "liver_segment_iii": 0.6,
        "liver_segment_v": 0.8,
        "liver_segment_vi": 0.75,
        "liver_segment_vii": 0.9,
        "liver_segment_viii": 0.85,
    },
    cmap="YlOrRd",
    colorbar_label="Function Score",
)
liver.save("liver.png")

Liver Segments Example

Abdomen GI Tract

import mediplot as mp

abdomen = mp.OrganMap("abdomen_gi_tract_anterior")
abdomen.fill_dict(
    {
        "liver": 0.8,
        "stomach_and_duodenum": 0.6,
        "pancreas": 0.5,
        "gallbladder": 0.7,
        "colon_and_ileum": 0.4,
    },
    cmap="RdYlGn",
    colorbar_label="Health Index",
)
abdomen.save("abdomen.png")

Abdomen Example

Side-by-Side Comparisons

import matplotlib.pyplot as plt
import mediplot as mp

fig, axes = plt.subplots(1, 3, figsize=(18, 6))

# Brain Frontal Lobes
brain = mp.OrganMap("brain_frontal_anterior", ax=axes[0])
brain.fill_dict({"left_frontal_pole": 0.9, "right_frontal_pole": 0.85}, show_colorbar=False)
axes[0].set_title("Brain Frontal Lobes")

# Liver Segments
liver = mp.OrganMap("liver_segments_anterior", ax=axes[1])
liver.fill_dict({"liver_segment_ii": 0.9, "liver_segment_vii": 0.5}, show_colorbar=False)
axes[1].set_title("Liver Segments")

# Abdomen
abdomen = mp.OrganMap("abdomen_gi_tract_anterior", ax=axes[2])
abdomen.fill_dict({"liver": 0.8, "stomach_and_duodenum": 0.6}, show_colorbar=False)
axes[2].set_title("Abdomen GI Tract")

plt.tight_layout()
plt.savefig("comparison.png")

Clinical Visualizations

Lab Panel

import mediplot as mp

panel = mp.LabPanel("Complete Blood Count")
panel.add_result(mp.LabResult("WBC", 7.5, "K/uL", 4.5, 11.0))
panel.add_result(mp.LabResult("RBC", 4.8, "M/uL", 4.0, 5.5))
panel.add_result(mp.LabResult("Hemoglobin", 14.2, "g/dL", 12.0, 16.0))
panel.plot()

Patient Timeline

import mediplot as mp
from datetime import datetime

timeline = mp.PatientTimeline("Patient Journey")
timeline.add_event(mp.TimelineEvent(datetime(2024, 1, 15), "Admission", "admission"))
timeline.add_event(mp.TimelineEvent(datetime(2024, 1, 16), "Surgery", "procedure"))
timeline.add_event(mp.TimelineEvent(datetime(2024, 1, 20), "Discharge", "discharge"))
timeline.plot()

Available Shapes

MediPlot includes 216 anatomical recipes organized by category:

Category Shapes Description
brain_atlas 78 Frontal, parietal, temporal, occipital lobes, cerebellum, brainstem, thalamus, hypothalamus, basal ganglia, limbic system, insula, ventricles (6 views each)
abdomen 66 Organs, GI tract, urogenital system, arteries, veins, spine, ribs, muscles (6 views each)
head_neck 48 Skeleton, muscles, arteries, veins, vessels, glands, cartilage (6 views each)
liver 24 Liver segments (I-VIII) and vasculature (6 views each)

Exploring Available Shapes

import mediplot as mp

# List all available categories
print(mp.list_categories())
# ['abdomen', 'brain_atlas', 'head_neck', 'liver']

# List shapes in a category
print(mp.list_shapes("brain_atlas"))
# ['brain_frontal_anterior', 'brain_frontal_posterior', 'brain_frontal_lateral_left', ...]

# Get a shape and explore its regions
shape = mp.get_shape("liver_segments_anterior")
print(list(shape.regions.keys()))
# ['liver_segment_i', 'liver_segment_ii', 'liver_segment_iii', ...]

# Use any shape with OrganMap
custom = mp.OrganMap("head_neck_arteries_lateral_left")
custom.fill_dict({...})

Medical Colormaps

import mediplot as mp

# Available medical colormaps
colormaps = [
    "pain",         # Green -> Red (no pain -> severe)
    "inflammation", # White -> Deep red
    "perfusion",    # Blue -> Red
    "oxygenation",  # Blue -> Red (deoxygenated -> oxygenated)
    "temperature",  # Cold blue -> Fever red
    "severity",     # 5-level categorical
]

# Use with any visualization
organ = mp.OrganMap("brain_frontal_anterior")
organ.fill_dict({"left_frontal_pole": 0.7}, cmap="perfusion")

License

This project is licensed under the Polyform Noncommercial License 1.0.0.

Free for:

  • Personal use
  • Academic research
  • Educational purposes
  • Non-profit organizations

Commercial use requires a separate license. Contact thomaskon90@gmail.com for commercial licensing inquiries.

Development

Setup

# Clone the repository
git clone https://github.com/MuteJester/MediPlot.git
cd MediPlot

# Install in development mode
pip install -e ".[dev]"

Running Tests

pytest

Code Quality

# Linting
ruff check src/

# Type checking
mypy src/

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Author

Thomas Konstantinovsky - thomaskon90@gmail.com

Links

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

mediplot-0.2.0.tar.gz (634.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mediplot-0.2.0-py3-none-any.whl (850.7 kB view details)

Uploaded Python 3

File details

Details for the file mediplot-0.2.0.tar.gz.

File metadata

  • Download URL: mediplot-0.2.0.tar.gz
  • Upload date:
  • Size: 634.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mediplot-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c5b6e639eb51913e943eea04df193ef91c61ce2e65eb2ba4657ac07c98bab377
MD5 23fa31724fc5390707b2b4c8b665737e
BLAKE2b-256 fbba0c5bc80aad77074efbfa0697038e8ffa1b0b69a5fb775c7e166383ff95b7

See more details on using hashes here.

File details

Details for the file mediplot-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mediplot-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 850.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mediplot-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4ece48b473706b7b72417922cefd3c965c7df0594bdd2f2854fa3b5f8f7d000c
MD5 b5a5806d4ca43aeb2adf5c2b2f9ae7bf
BLAKE2b-256 323271951b73a5650109057529902e6e4f9b09e107dcc594135a2217107c890d

See more details on using hashes here.

Supported by

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