Skip to content

Gabbard Diagram

Gabbard diagrams visualize satellite populations and debris clouds by plotting orbital period versus apogee/perigee altitude. These plots are particularly useful for analyzing satellite breakup events and orbital debris distributions.

plot_gabbard_diagram

plot_gabbard_diagram(objects, epoch=None, altitude_units: str = 'km', period_units: str = 'min', backend: str = 'matplotlib', width=None, height=None) -> Union[Figure, Figure]

Plot Gabbard diagram showing orbital period vs apogee/perigee altitude.

A Gabbard diagram is a scatter plot used to visualize satellite populations and debris clouds, plotting each object's apogee and perigee altitudes against its orbital period. This visualization is particularly useful for analyzing satellite breakup events and orbital debris distributions.

Parameters:

Name Type Description Default
objects list

List of objects to plot. Can be: - List of Propagator objects (SGPPropagator or KeplerianPropagator) - List of numpy arrays (state vectors or Keplerian elements) with format specified - List of dicts with keys: - objects: List of propagators or states - format (str, optional): 'ECI', 'ECEF', or 'Keplerian' (required for state arrays) - color (str, optional): Marker color - marker (str, optional): Marker style - label (str, optional): Legend label

required
epoch Epoch

Epoch to evaluate propagator states. If None, uses current state.

None
altitude_units str

'km' or 'm'. Default: 'km'

'km'
period_units str

'min' or 's'. Default: 'min'

'min'
backend str

'matplotlib' or 'plotly'. Default: 'matplotlib'

'matplotlib'
width int

Figure width in pixels (plotly only). Default: None (responsive)

None
height int

Figure height in pixels (plotly only). Default: None (responsive)

None

Returns:

Type Description
Union[Figure, Figure]

Union[matplotlib.figure.Figure, plotly.graph_objects.Figure]: Figure object

Example
import brahe as bh
import numpy as np

# Set up EOP
eop = bh.FileEOPProvider.from_default_standard(bh.EarthOrientationFileType.STANDARD, True)
bh.set_global_eop_provider(eop)

# Create propagators for debris cloud
epoch = bh.Epoch.from_datetime(2024, 1, 1, 0, 0, 0.0, 0.0, bh.TimeSystem.UTC)

# Parent orbit
oe_parent = np.array([bh.R_EARTH + 215e3, 0.1, np.radians(97.8), 0.0, 0.0, 0.0])

# Simulate debris with various delta-v
debris = []
for dv in np.linspace(-100, 100, 50):  # m/s delta-v
    oe = oe_parent.copy()
    # Simplified: adjust semi-major axis based on delta-v
    oe[0] += dv * 1000  # rough approximation
    oe[1] = max(0.001, min(0.3, oe[1] + np.random.normal(0, 0.05)))
    state = bh.state_koe_to_eci(oe, bh.AngleFormat.RADIANS)
    prop = bh.KeplerianPropagator.from_eci(epoch, state, 60.0)
    debris.append(prop)

# Plot Gabbard diagram
fig = bh.plot_gabbard_diagram(
    debris,
    epoch=epoch,
    altitude_units='km',
    period_units='min',
    backend='matplotlib'
)