diff --git a/changelog/188.feature.rst b/changelog/188.feature.rst new file mode 100644 index 00000000..07c233f8 --- /dev/null +++ b/changelog/188.feature.rst @@ -0,0 +1,2 @@ +Add a ``peek()`` method to ``GenericSpectrogram``, which gives it a quick-look plotting functionality +similar to ``sunpy.map.Map.peek()`` and ``radiospectra.spectrum.Spectrum.peek()``. diff --git a/docs/code_ref/spectrogram.rst b/docs/code_ref/spectrogram.rst index cd288d25..b3b56ff5 100644 --- a/docs/code_ref/spectrogram.rst +++ b/docs/code_ref/spectrogram.rst @@ -1,4 +1,42 @@ `radiospectra.spectrogram` ========================== +The `radiospectra.spectrogram` module provides classes and utilities for working with dynamic solar radio spectrograms. + +Visualizing Spectrograms +------------------------ + +All spectrogram objects in ``radiospectra`` inherit from :class:`~radiospectra.spectrogram.GenericSpectrogram`, which provides a :meth:`~radiospectra.spectrogram.GenericSpectrogram.peek` method for quick-look visualization. + +The ``peek()`` method creates a new figure and plots the spectrogram with sensible defaults, including an optional colorbar. + +.. plot:: + :include-source: + + import numpy as np + import astropy.units as u + from astropy.time import Time + from radiospectra.spectrogram import GenericSpectrogram + + # Create artificial spectrogram data + times = Time("2021-01-01T00:00:00") + np.arange(100) * u.min + freqs = np.linspace(10, 100, 50) * u.MHz + data = np.random.rand(50, 100) + + # Define minimal metadata + meta = { + "observatory": "Example Data", + "instrument": "Mock Instrument", + "detector": "Mock Detector", + "start_time": times[0], + "end_time": times[-1], + "wavelength": u.Quantity([1, 10], unit=u.m), + "times": times, + "freqs": freqs, + } + + # Instantiate and peek + spec = GenericSpectrogram(data, meta) + spec.peek() + .. automodapi:: radiospectra.spectrogram diff --git a/radiospectra/spectrogram/spectrogrambase.py b/radiospectra/spectrogram/spectrogrambase.py index f1cb2b3f..2fbab9bf 100644 --- a/radiospectra/spectrogram/spectrogrambase.py +++ b/radiospectra/spectrogram/spectrogrambase.py @@ -1,3 +1,5 @@ +from sunpy.visualization import peek_show + from radiospectra.exceptions import SpectraMetaValidationError from radiospectra.mixins import NonUniformImagePlotMixin, PcolormeshPlotMixin @@ -107,3 +109,23 @@ def __repr__(self): f" {self.wavelength.min} - {self.wavelength.max}," f" {self.start_time.isot} to {self.end_time.isot}>" ) + + @peek_show + def peek(self, show_colorbar=True, **kwargs): + """ + Displays a quick-look plot of the Spectrogram. + + Parameters + ---------- + show_colorbar : `bool`, optional + Whether to show a colorbar. Defaults to `True`. + **kwargs : `dict` + Any additional keyword arguments are passed to `~radiospectra.spectrogram.GenericSpectrogram.plot`. + """ + import matplotlib.pyplot as plt + + figure = plt.figure() + axes = figure.add_subplot() + ret = self.plot(axes=axes, **kwargs) + if show_colorbar: + figure.colorbar(ret)