Visualization
COASTSim includes plotting utilities for DITL simulation outputs and telemetry data. The visualization system works with COASTSim’s structured telemetry system, providing comprehensive plotting capabilities for analyzing simulation results. These plotting functions are implemented under conops.visualization and accept an optional config parameter. When omitted, the functions use ditl.config.visualization if available, or sensible defaults from the VisualizationConfig model.
VisualizationConfig
The VisualizationConfig model lives in conops.config.visualization and exposes the configuration for fonts, colors, and timeline options.
Important fields:
font_family (str): Font family used across plot titles, labels, and legends (default: Helvetica).
title_font_size (int)
label_font_size (int)
legend_font_size (int)
tick_font_size (int)
mode_colors (dict[str, str]): Mode color mapping for ACS modes (e.g. SCIENCE, SLEWING, SAA).
Key plotting utilities
The following plotting functions are available under conops.visualization:
plot_ditl_telemetry() — basic multi-panel timeline showing RA/Dec, ACS mode, battery, power, and observation IDs from telemetry data.
plot_data_management_telemetry() — recorder volume, fill fraction, generated/downlinked data, and alerts from telemetry data.
plot_acs_mode_distribution() — pie chart showing the distribution of time spent in each ACS mode from telemetry data.
plot_ditl_timeline() — timeline with orbit numbers, observations, slews, SAA, and eclipses.
plot_sky_pointing() — an interactive Mollweide sky projection with current pointing and constraints.
save_sky_pointing_movie() — export the entire DITL sky pointing visualization as a movie (MP4, AVI, or GIF).
Examples and advanced usage
The visualization functions accept an optional config parameter or get the configuration from ditl.config.visualization if available.
Example:
from conops import MissionConfig, QueueDITL
from conops.visualization import plot_ditl_telemetry, plot_acs_mode_distribution
from conops.config.visualization import VisualizationConfig
from rust_ephem import TLEEphemeris
from datetime import datetime, timedelta
cfg = MissionConfig.from_json_file("examples/example_config.json")
# Customize visual style
cfg.visualization.font_family = "Helvetica"
cfg.visualization.title_font_size = 14
cfg.visualization.mode_colors["SAA"] = "#800080"
begin = datetime.utcnow()
end = begin + timedelta(days=1)
ephem = TLEEphemeris(tle="examples/example.tle", begin=begin, end=end)
ditl = QueueDITL(config=cfg)
ditl.ephem = ephem
ditl.calc()
fig, axes = plot_ditl_telemetry(ditl)
fig2, ax2 = plot_acs_mode_distribution(ditl, config=cfg.visualization)
Working with Telemetry Data
All timeline and telemetry visualizations work with COASTSim’s structured telemetry system.
The telemetry data is automatically recorded during DITL simulation and stored in ditl.telemetry.
from conops.ditl import QueueDITL
from conops.visualization import plot_ditl_telemetry
ditl = QueueDITL(config=config)
ditl.calc()
# Access structured telemetry data
telemetry = ditl.telemetry
housekeeping = telemetry.housekeeping # All timestep data
payload_data = telemetry.data # Data generation events
# Plot telemetry
fig, axes = plot_ditl_telemetry(ditl)
For batch processing across many runs, persist logs with DITLLogStore and load events by run_id:
from conops.ditl import DITLLogStore
store = DITLLogStore("ditl_logs.sqlite")
events = store.fetch_events("my-run-001")
# feed events to your visualization pipeline as needed
store.close()
Fonts and fallbacks
Matplotlib will fall back if a requested font family is not installed on the system. To guarantee a specific font across platforms, provide a FontProperties object with a path to the font file. Alternatively, ensure the font is installed on your system.
from matplotlib.font_manager import FontProperties
fp = FontProperties(fname='/Library/Fonts/Helvetica.ttc')
ax.set_title("Title", fontproperties=fp)
Example images
Further references
See the API docs for the visualization functions under conops.visualization.