Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Plot unidirectional spectrum #117

Open
ryancoe opened this issue Mar 26, 2024 · 3 comments
Open

Plot unidirectional spectrum #117

ryancoe opened this issue Mar 26, 2024 · 3 comments

Comments

@ryancoe
Copy link
Contributor

ryancoe commented Mar 26, 2024

For cases in which the there is 1 or fewer dimensions (len(da.spec.dir) <= 1), it'd be nice if calling da.plot() would automatically plot spectral density vs. frequency instead of erroring out. Currently, you can get a standard plot straight from xarray by calling da.spec.oned().plot(), but it'd be nice if the axis labeling, etc. were provided by wavespectra. Any thoughts?

Current error message
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[30], [line 1](vscode-notebook-cell:?execution_count=30&line=1)
----> [1](vscode-notebook-cell:?execution_count=30&line=1) da.spec.plot()

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:768](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:768), in SpecArray.plot(self, kind, normalised, logradius, as_period, rmin, rmax, show_theta_labels, show_radii_labels, radii_ticks, radii_labels_angle, radii_labels_size, cbar_ticks, cmap, extend, efth_min, **kwargs)
    [718](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:718) def plot(
    [719](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:719)     self,
    [720](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:720)     kind="contourf",
   (...)
    [735](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:735)     **kwargs
    [736](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:736) ):
    [737](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:737)     """Plot spectra in polar axis.
    [738](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:738) 
    [739](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:739)     Args:
   (...)
    [766](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:766) 
    [767](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:767)     """
--> [768](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:768)     return polar_plot(
    [769](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:769)         darr=self._obj.copy(deep=True),
    [770](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:770)         kind=kind,
    [771](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:771)         normalised=normalised,
    [772](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:772)         logradius=logradius,
    [773](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:773)         as_period=as_period,
    [774](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:774)         rmin=rmin,
    [775](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:775)         rmax=rmax,
    [776](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:776)         show_theta_labels=show_theta_labels,
    [777](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:777)         show_radii_labels=show_radii_labels,
    [778](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:778)         radii_ticks=radii_ticks,
    [779](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:779)         radii_labels_angle=radii_labels_angle,
    [780](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:780)         radii_labels_size=radii_labels_size,
    [781](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:781)         cbar_ticks=cbar_ticks,
    [782](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:782)         cmap=cmap,
    [783](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:783)         extend=extend,
    [784](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:784)         efth_min=efth_min,
    [785](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:785)         **kwargs
    [786](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/specarray.py:786)     )

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:350](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:350), in polar_plot(*args, **kargs)
    [325](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:325) """Plot spectra in polar axis.
    [326](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:326) 
    [327](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:327) Args:
   (...)
    [347](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:347) 
    [348](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:348) """
    [349](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:349) wp = WavePlot(*args, **kargs)
--> [350](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:350) return wp()

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:107](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:107), in WavePlot.__call__(self)
    [104](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:104) subplot_kws = {**default_subplot_kws, **self._kwargs.pop("subplot_kws", {})}
    [106](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:106) # Call plotting function
--> [107](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:107) pobj = getattr(self.darr.plot, self.kind)(
    [108](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:108)     subplot_kws=subplot_kws, **self.kwargs
    [109](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:109) )
    [111](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:111) # Adjusting axes
    [112](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/wavespectra/plot.py:112) if isinstance(pobj, xr.plot.facetgrid.FacetGrid):

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1311](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1311), in _plot2d.<locals>.plotmethod(_PlotMethods_obj, x, y, figsize, size, aspect, ax, row, col, col_wrap, xincrease, yincrease, add_colorbar, add_labels, vmin, vmax, cmap, colors, center, robust, extend, levels, infer_intervals, subplot_kws, cbar_ax, cbar_kwargs, xscale, yscale, xticks, yticks, xlim, ylim, norm, **kwargs)
   [1309](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1309) for arg in ["_PlotMethods_obj", "newplotfunc", "kwargs"]:
   [1310](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1310)     del allargs[arg]
-> [1311](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1311) return newplotfunc(**allargs)

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1213](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1213), in _plot2d.<locals>.newplotfunc(darray, x, y, figsize, size, aspect, ax, row, col, col_wrap, xincrease, yincrease, add_colorbar, add_labels, vmin, vmax, cmap, center, robust, extend, levels, infer_intervals, colors, subplot_kws, cbar_ax, cbar_kwargs, xscale, yscale, xticks, yticks, xlim, ylim, norm, **kwargs)
   [1209](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1209)     raise ValueError("plt.imshow's `aspect` kwarg is not available in xarray")
   [1211](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1211) ax = get_axis(figsize, size, aspect, ax, **subplot_kws)
-> [1213](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1213) primitive = plotfunc(
   [1214](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1214)     xplt,
   [1215](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1215)     yplt,
   [1216](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1216)     zval,
   [1217](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1217)     ax=ax,
   [1218](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1218)     cmap=cmap_params["cmap"],
   [1219](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1219)     vmin=cmap_params["vmin"],
   [1220](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1220)     vmax=cmap_params["vmax"],
   [1221](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1221)     norm=cmap_params["norm"],
   [1222](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1222)     **kwargs,
   [1223](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1223) )
   [1225](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1225) # Label the plot with metadata
   [1226](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1226) if add_labels:

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1429](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1429), in contourf(x, y, z, ax, **kwargs)
   [1422](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1422) @_plot2d
   [1423](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1423) def contourf(x, y, z, ax, **kwargs):
   [1424](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1424)     """
   [1425](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1425)     Filled contour plot of 2D DataArray.
   [1426](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1426) 
   [1427](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1427)     Wraps :py:func:`matplotlib:matplotlib.pyplot.contourf`.
   [1428](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1428)     """
-> [1429](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1429)     primitive = ax.contourf(x, y, z, **kwargs)
   [1430](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/xarray/plot/plot.py:1430)     return primitive

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1465](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1465), in _preprocess_data.<locals>.inner(ax, data, *args, **kwargs)
   [1462](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1462) @functools.wraps(func)
   [1463](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1463) def inner(ax, *args, data=None, **kwargs):
   [1464](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1464)     if data is None:
-> [1465](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1465)         return func(ax, *map(sanitize_sequence, args), **kwargs)
   [1467](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1467)     bound = new_sig.bind(ax, *args, **kwargs)
   [1468](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1468)     auto_label = (bound.arguments.get(label_namer)
   [1469](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/__init__.py:1469)                   or bound.kwargs.get(label_namer))

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6528](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6528), in Axes.contourf(self, *args, **kwargs)
   [6519](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6519) """
   [6520](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6520) Plot filled contours.
   [6521](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6521) 
   (...)
   [6525](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6525) %(contour_doc)s
   [6526](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6526) """
   [6527](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6527) kwargs['filled'] = True
-> [6528](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6528) contours = mcontour.QuadContourSet(self, *args, **kwargs)
   [6529](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6529) self._request_autoscale_view()
   [6530](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/axes/_axes.py:6530) return contours

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:847](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:847), in ContourSet.__init__(self, ax, levels, filled, linewidths, linestyles, hatches, alpha, origin, extent, cmap, colors, norm, vmin, vmax, extend, antialiased, nchunk, locator, transform, negative_linestyles, clip_path, *args, **kwargs)
    [843](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:843) if self.negative_linestyles is None:
    [844](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:844)     self.negative_linestyles = \
    [845](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:845)         mpl.rcParams['contour.negative_linestyle']
--> [847](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:847) kwargs = self._process_args(*args, **kwargs)
    [848](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:848) self._process_levels()
    [850](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:850) self._extend_min = self.extend in ['min', 'both']

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1533](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1533), in QuadContourSet._process_args(self, corner_mask, algorithm, *args, **kwargs)
   [1530](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1530)         corner_mask = mpl.rcParams['contour.corner_mask']
   [1531](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1531) self._corner_mask = corner_mask
-> [1533](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1533) x, y, z = self._contour_args(args, kwargs)
   [1535](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1535) contour_generator = contourpy.contour_generator(
   [1536](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1536)     x, y, z, name=self._algorithm, corner_mask=self._corner_mask,
   [1537](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1537)     line_type=contourpy.LineType.SeparateCode,
   [1538](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1538)     fill_type=contourpy.FillType.OuterCode,
   [1539](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1539)     chunk_size=self.nchunk)
   [1541](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1541) t = self.get_transform()

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1573](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1573), in QuadContourSet._contour_args(self, args, kwargs)
   [1571](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1571) elif 2 < nargs <= 4:
   [1572](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1572)     x, y, z_orig, *args = args
-> [1573](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1573)     x, y, z = self._check_xyz(x, y, z_orig, kwargs)
   [1575](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1575) else:
   [1576](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1576)     raise _api.nargs_error(fn, takes="from 1 to 4", given=nargs)

File [~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1601](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1601), in QuadContourSet._check_xyz(self, x, y, z, kwargs)
   [1599](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1599)     raise TypeError(f"Input z must be 2D, not {z.ndim}D")
   [1600](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1600) if z.shape[0] < 2 or z.shape[1] < 2:
-> [1601](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1601)     raise TypeError(f"Input z must be at least a (2, 2) shaped array, "
   [1602](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1602)                     f"but has shape {z.shape}")
   [1603](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1603) Ny, Nx = z.shape
   [1605](https://file+.vscode-resource.vscode-cdn.net/Users/rcoe/Downloads/~/mambaforge/envs/wot_dev/lib/python3.11/site-packages/matplotlib/contour.py:1605) if x.ndim != y.ndim:

TypeError: Input z must be at least a (2, 2) shaped array, but has shape (75, 1)

<\details>

@rafa-guedes
Copy link
Collaborator

This would be nice @ryancoe. The plotting code in wavespectra is all defined in the plot.py module which is just a wrapper to modify the native plotting capability from xarray. We could implement something there. I won't have much time to look into this soon but if you are keen to have a crack please go ahead - happy to help out if you have questions on how that plugin works

@ryancoe
Copy link
Contributor Author

ryancoe commented Mar 27, 2024

Sounds good. I did take a look at plot.py and also SpecArray.plot. I think I understand what I'd need to do and will give it a shot if/when I have time. I certainly understand that you have other things that are higher priority, but I just wanted to check if you thought this'd have value.

@rafa-guedes
Copy link
Collaborator

@ryancoe I started to have a crack at this but it is a bit messy because the plot accessor in wavespectra is all about allowing polar-type plots so it really relies on directions being there. That being said, 1D spectra will plot just fine the way you suggested using xarray's directly, for example:

from wavespectra import read_swan
import matplotlib.pyplot as plt


dset = read_swan("tests/sample_files/swanfile.spec", as_site=True).isel(site=0)
ds1d = dset.spec.oned()

fig = plt.figure()
ds1d.plot() # plots a pcolor-type plot of freq vs time with ef as the color

# Or
ds1d = ds1d.isel(time=0)
fig = plt.figure()
ds1d.plot() # plots a line plot of freq vs ef

plt.show()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants