Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Plotting GDM Models

There are two options for plotting GDM models:

  1. Using the plot Function
    This returns an interactive Plotly plot with detailed information displayed on hover.

  2. Plotting from a GeoDataFrame
    Export the model to a GeoDataFrame and use standard geospatial plotting libraries (e.g., GeoPandas or Matplotlib) for visualization.

We start by loading a sample distribution system.

from gdm.distribution import DistributionSystem
from gdmloader.constants import GCS_CASE_SOURCE
from gdmloader.source import SystemLoader
import plotly.io as pio

# Use the MIME renderer so Jupyter Book can render Plotly output cells.
pio.renderers.default = "plotly_mimetype"

gdm_loader = SystemLoader()
gdm_loader.add_source(GCS_CASE_SOURCE)

distribution_system: DistributionSystem = gdm_loader.load_dataset(
    source_name=GCS_CASE_SOURCE.name,
    system_type=DistributionSystem,
    dataset_name="p1rhs7_1247",
)
distribution_system.name = "p1rhs7_1247"
distribution_system.info()
Loading...
Loading...

Plotting using Plotly

fig = distribution_system.plot(
    flip_coordinates=False,
    show=False,
)
fig
Loading...
from gdm.distribution.enums import MapType, PlotingStyle

fig = distribution_system.plot(
    map_type=MapType.SCATTER_MAP,
    style=PlotingStyle.OPEN_STREET_MAP,
    flip_coordinates=False,
    show=False,
)
fig
Loading...
fig = distribution_system.plot(
    map_type=MapType.SCATTER_MAP,
    style=PlotingStyle.CARTO_DARKMATTER,
    flip_coordinates=False,
    show=False,
)
fig
Loading...
fig = distribution_system.plot(
    map_type=MapType.SCATTER_MAP,
    style=PlotingStyle.CARTO_POSITRON,
    flip_coordinates=False,
    show=False,
)
fig
Loading...

Distribution system plots can be styled by passing plotting options to the function to customize their appearance.

from gdm.distribution.enums import ColorNodeBy, ColorLineBy

fig = distribution_system.plot(
    color_node_by=ColorNodeBy.VOLTAGE_LEVEL,
    color_line_by=ColorLineBy.PHASE,
    flip_coordinates=False,
    show=False,
)
fig
Loading...
## Plotting using Matplotlib
import matplotlib.pyplot as plt

df = distribution_system.to_gdf()
ax = df.plot()
Requirement already satisfied: matplotlib in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (3.10.8)
Requirement already satisfied: contourpy>=1.0.1 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (4.61.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (1.4.9)
Requirement already satisfied: numpy>=1.23 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (2.3.5)
Requirement already satisfied: packaging>=20.0 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (25.0)
Requirement already satisfied: pillow>=8 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (12.1.1)
Requirement already satisfied: pyparsing>=3 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (3.2.5)
Requirement already satisfied: python-dateutil>=2.7 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from matplotlib) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /opt/homebrew/Caskroom/miniconda/base/envs/gdm-v1/lib/python3.13/site-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)
<Figure size 640x480 with 1 Axes>
<Figure size 640x480 with 1 Axes>