There are two options for plotting GDM models:
Using the
plotFunction
This returns an interactive Plotly plot with detailed information displayed on hover.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,
)
figLoading...
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,
)
figLoading...
fig = distribution_system.plot(
map_type=MapType.SCATTER_MAP,
style=PlotingStyle.CARTO_DARKMATTER,
flip_coordinates=False,
show=False,
)
figLoading...
fig = distribution_system.plot(
map_type=MapType.SCATTER_MAP,
style=PlotingStyle.CARTO_POSITRON,
flip_coordinates=False,
show=False,
)
figLoading...
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,
)
figLoading...
## 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)

