From 3cd0a2e63c2ca85c1c696286d7b215e6f11760b2 Mon Sep 17 00:00:00 2001 From: Adam Theisen Date: Wed, 29 Nov 2023 15:12:06 -0600 Subject: [PATCH] Improvements for the secondary y axis functionality (#723) * ENH: Enhancing the secondary y axis functionality which will be a change in how we do things and might need to be considered for a v2.0 * ENH: Adding example for the secondary y-axis plotting * ENH: formatting * ENH: New plot for testing secondary_y * ENH: New test for secondary_y * ENH: pep8 update * ENH: Bug fix * ENH: Bug fixes for examples * DOC: Pep8 * DOC: PEP8 * ENH: bug fix for test --- act/plotting/contourdisplay.py | 2 +- act/plotting/distributiondisplay.py | 133 ++++++++-------- act/plotting/geodisplay.py | 2 +- act/plotting/plot.py | 73 +++++++-- act/plotting/skewtdisplay.py | 3 +- act/plotting/timeseriesdisplay.py | 159 +++++++++++++------- act/plotting/windrosedisplay.py | 43 ++++-- act/plotting/xsectiondisplay.py | 2 +- act/tests/baseline/test_secondary_y.png | Bin 0 -> 79665 bytes act/tests/test_plotting.py | 31 +++- examples/discovery/plot_asos_temp.py | 2 +- examples/discovery/plot_noaa_fmcw_moment.py | 2 +- examples/plotting/plot_hist_kwargs.py | 2 +- examples/plotting/plot_scatter.py | 42 +++--- examples/plotting/plot_secondary_y.py | 49 ++++++ examples/plotting/plot_violin.py | 11 +- examples/workflows/plot_weighted_average.py | 2 +- 17 files changed, 372 insertions(+), 186 deletions(-) create mode 100644 act/tests/baseline/test_secondary_y.png create mode 100644 examples/plotting/plot_secondary_y.py diff --git a/act/plotting/contourdisplay.py b/act/plotting/contourdisplay.py index cbfe7ef69d..75e8bebdd3 100644 --- a/act/plotting/contourdisplay.py +++ b/act/plotting/contourdisplay.py @@ -19,7 +19,7 @@ class ContourDisplay(Display): """ def __init__(self, ds, subplot_shape=(1,), ds_name=None, **kwargs): - super().__init__(ds, subplot_shape, ds_name, **kwargs) + super().__init__(ds, subplot_shape, ds_name, secondary_y_allowed=False, **kwargs) def create_contour( self, diff --git a/act/plotting/distributiondisplay.py b/act/plotting/distributiondisplay.py index 92baa94ff4..a819bbd8aa 100644 --- a/act/plotting/distributiondisplay.py +++ b/act/plotting/distributiondisplay.py @@ -33,7 +33,7 @@ class DistributionDisplay(Display): """ def __init__(self, ds, subplot_shape=(1,), ds_name=None, **kwargs): - super().__init__(ds, subplot_shape, ds_name, **kwargs) + super().__init__(ds, subplot_shape, ds_name, secondary_y_allowed=True, **kwargs) def set_xrng(self, xrng, subplot_index=(0,)): """ @@ -55,7 +55,7 @@ def set_xrng(self, xrng, subplot_index=(0,)): elif not hasattr(self, 'xrng') and len(self.axes.shape) == 1: self.xrng = np.zeros((self.axes.shape[0], 2), dtype='datetime64[D]') - self.axes[subplot_index].set_xlim(xrng) + self.axes[subplot_index][0].set_xlim(xrng) self.xrng[subplot_index, :] = np.array(xrng) def set_yrng(self, yrng, subplot_index=(0,)): @@ -81,7 +81,7 @@ def set_yrng(self, yrng, subplot_index=(0,)): if yrng[0] == yrng[1]: yrng[1] = yrng[1] + 1 - self.axes[subplot_index].set_ylim(yrng) + self.axes[subplot_index][0].set_ylim(yrng) self.yrng[subplot_index, :] = yrng def _get_data(self, dsname, fields): @@ -163,13 +163,13 @@ def plot_stacked_bar_graph( # We will defaut the y direction to have the same # of bins as x sortby_bins = np.linspace(ydata.values.min(), ydata.values.max(), len(bins)) - # Get the current plotting axis, add day/night background and plot data + # Get the current plotting axis if self.fig is None: self.fig = plt.figure() - if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) if sortby_field is not None: if 'units' in ydata.attrs: @@ -189,26 +189,26 @@ def plot_stacked_bar_graph( bins=[bins, sortby_bins], **hist_kwargs) x_inds = (x_bins[:-1] + x_bins[1:]) / 2.0 - self.axes[subplot_index].bar( + self.axes[subplot_index][0].bar( x_inds, my_hist[:, 0].flatten(), label=(str(y_bins[0]) + ' to ' + str(y_bins[1])), **kwargs, ) for i in range(1, len(y_bins) - 1): - self.axes[subplot_index].bar( + self.axes[subplot_index][0].bar( x_inds, my_hist[:, i].flatten(), bottom=my_hist[:, i - 1], label=(str(y_bins[i]) + ' to ' + str(y_bins[i + 1])), **kwargs, ) - self.axes[subplot_index].legend() + self.axes[subplot_index][0].legend() else: my_hist, bins = np.histogram(xdata.values.flatten(), bins=bins, density=density, **hist_kwargs) x_inds = (bins[:-1] + bins[1:]) / 2.0 - self.axes[subplot_index].bar(x_inds, my_hist) + self.axes[subplot_index][0].bar(x_inds, my_hist) # Set Title if set_title is None: @@ -220,9 +220,9 @@ def plot_stacked_bar_graph( dt_utils.numpy_to_arm_date(self._ds[dsname].time.values[0]), ] ) - self.axes[subplot_index].set_title(set_title) - self.axes[subplot_index].set_ylabel('count') - self.axes[subplot_index].set_xlabel(xtitle) + self.axes[subplot_index][0].set_title(set_title) + self.axes[subplot_index][0].set_ylabel('count') + self.axes[subplot_index][0].set_xlabel(xtitle) return_dict = {} return_dict['plot_handle'] = self.axes[subplot_index] @@ -306,13 +306,13 @@ def plot_size_distribution( + 'length is equal to the field length!' ) - # Get the current plotting axis, add day/night background and plot data + # Get the current plotting axis if self.fig is None: self.fig = plt.figure() - if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) # Set Title if set_title is None: @@ -327,10 +327,10 @@ def plot_size_distribution( if time is not None: t = pd.Timestamp(time) set_title += ''.join([' at ', ':'.join([str(t.hour), str(t.minute), str(t.second)])]) - self.axes[subplot_index].set_title(set_title) - self.axes[subplot_index].step(bins.values, xdata.values, **kwargs) - self.axes[subplot_index].set_xlabel(xtitle) - self.axes[subplot_index].set_ylabel(ytitle) + self.axes[subplot_index][0].set_title(set_title) + self.axes[subplot_index][0].step(bins.values, xdata.values, **kwargs) + self.axes[subplot_index][0].set_xlabel(xtitle) + self.axes[subplot_index][0].set_ylabel(ytitle) return self.axes[subplot_index] @@ -412,8 +412,9 @@ def plot_stairstep_graph( self.fig = plt.figure() if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) if sortby_field is not None: if 'units' in ydata.attrs: @@ -433,26 +434,26 @@ def plot_stairstep_graph( **hist_kwargs ) x_inds = (x_bins[:-1] + x_bins[1:]) / 2.0 - self.axes[subplot_index].step( + self.axes[subplot_index][0].step( x_inds, my_hist[:, 0].flatten(), label=(str(y_bins[0]) + ' to ' + str(y_bins[1])), **kwargs, ) for i in range(1, len(y_bins) - 1): - self.axes[subplot_index].step( + self.axes[subplot_index][0].step( x_inds, my_hist[:, i].flatten(), label=(str(y_bins[i]) + ' to ' + str(y_bins[i + 1])), **kwargs, ) - self.axes[subplot_index].legend() + self.axes[subplot_index][0].legend() else: my_hist, bins = np.histogram(xdata.values.flatten(), bins=bins, density=density, **hist_kwargs) x_inds = (bins[:-1] + bins[1:]) / 2.0 - self.axes[subplot_index].step(x_inds, my_hist, **kwargs) + self.axes[subplot_index][0].step(x_inds, my_hist, **kwargs) # Set Title if set_title is None: @@ -464,9 +465,9 @@ def plot_stairstep_graph( dt_utils.numpy_to_arm_date(self._ds[dsname].time.values[0]), ] ) - self.axes[subplot_index].set_title(set_title) - self.axes[subplot_index].set_ylabel('count') - self.axes[subplot_index].set_xlabel(xtitle) + self.axes[subplot_index][0].set_title(set_title) + self.axes[subplot_index][0].set_ylabel('count') + self.axes[subplot_index][0].set_xlabel(xtitle) return_dict = {} return_dict['plot_handle'] = self.axes[subplot_index] @@ -568,10 +569,10 @@ def plot_heatmap( # Get the current plotting axis, add day/night background and plot data if self.fig is None: self.fig = plt.figure() - if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) if 'units' in ydata.attrs: ytitle = ''.join(['(', ydata.attrs['units'], ')']) @@ -597,7 +598,7 @@ def plot_heatmap( x_inds = (x_bins[:-1] + x_bins[1:]) / 2.0 y_inds = (y_bins[:-1] + y_bins[1:]) / 2.0 xi, yi = np.meshgrid(x_inds, y_inds, indexing='ij') - mesh = self.axes[subplot_index].pcolormesh(xi, yi, my_hist, shading=set_shading, **kwargs) + mesh = self.axes[subplot_index][0].pcolormesh(xi, yi, my_hist, shading=set_shading, **kwargs) # Set Title if set_title is None: @@ -608,13 +609,13 @@ def plot_heatmap( dt_utils.numpy_to_arm_date(self._ds[dsname].time.values[0]), ] ) - self.axes[subplot_index].set_title(set_title) - self.axes[subplot_index].set_ylabel(ytitle) - self.axes[subplot_index].set_xlabel(xtitle) + self.axes[subplot_index][0].set_title(set_title) + self.axes[subplot_index][0].set_ylabel(ytitle) + self.axes[subplot_index][0].set_xlabel(xtitle) self.add_colorbar(mesh, title='count', subplot_index=subplot_index) return_dict = {} - return_dict['plot_handle'] = self.axes[subplot_index] + return_dict['plot_handle'] = self.axes[subplot_index][0] return_dict['x_bins'] = x_bins return_dict['y_bins'] = y_bins return_dict['histogram'] = my_hist @@ -634,9 +635,9 @@ def set_ratio_line(self, subplot_index=(0, )): if self.axes is None: raise RuntimeError('set_ratio_line requires the plot to be displayed.') # Define the xticks of the figure - xlims = self.axes[subplot_index].get_xticks() + xlims = self.axes[subplot_index][0].get_xticks() ratio = np.linspace(xlims[0], xlims[-1]) - self.axes[subplot_index].plot(ratio, ratio, 'k--') + self.axes[subplot_index][0].plot(ratio, ratio, 'k--') def plot_scatter(self, x_field, @@ -713,15 +714,12 @@ def plot_scatter(self, # Define the axes for the figure if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) # Display the scatter plot, pass keyword args for unspecified attributes - scc = self.axes[subplot_index].scatter(xdata, - ydata, - c=mdata, - **kwargs - ) + scc = self.axes[subplot_index][0].scatter(xdata, ydata, c=mdata, **kwargs) # Set Title if set_title is None: @@ -748,9 +746,9 @@ def plot_scatter(self, cbar.ax.set_ylabel(ztitle) # Define the axe title, x-axis label, y-axis label - self.axes[subplot_index].set_title(set_title) - self.axes[subplot_index].set_ylabel(ytitle) - self.axes[subplot_index].set_xlabel(xtitle) + self.axes[subplot_index][0].set_title(set_title) + self.axes[subplot_index][0].set_ylabel(ytitle) + self.axes[subplot_index][0].set_xlabel(xtitle) return self.axes[subplot_index] @@ -818,8 +816,9 @@ def plot_violin(self, # Define the axes for the figure if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) # Define the axe label. If units are avaiable, plot. if 'units' in ndata.attrs: @@ -828,14 +827,14 @@ def plot_violin(self, axtitle = field # Display the scatter plot, pass keyword args for unspecified attributes - scc = self.axes[subplot_index].violinplot(ndata, - positions=positions, - vert=vert, - showmeans=showmeans, - showmedians=showmedians, - showextrema=showextrema, - **kwargs - ) + scc = self.axes[subplot_index][0].violinplot(ndata, + positions=positions, + vert=vert, + showmeans=showmeans, + showmedians=showmedians, + showextrema=showextrema, + **kwargs + ) if showmeans is True: scc['cmeans'].set_edgecolor('red') scc['cmeans'].set_label('mean') @@ -853,14 +852,14 @@ def plot_violin(self, ) # Define the axe title, x-axis label, y-axis label - self.axes[subplot_index].set_title(set_title) + self.axes[subplot_index][0].set_title(set_title) if vert is True: - self.axes[subplot_index].set_ylabel(axtitle) + self.axes[subplot_index][0].set_ylabel(axtitle) if positions is None: - self.axes[subplot_index].set_xticks([]) + self.axes[subplot_index][0].set_xticks([]) else: - self.axes[subplot_index].set_xlabel(axtitle) + self.axes[subplot_index][0].set_xlabel(axtitle) if positions is None: - self.axes[subplot_index].set_yticks([]) + self.axes[subplot_index][0].set_yticks([]) - return self.axes[subplot_index] + return self.axes[subplot_index][0] diff --git a/act/plotting/geodisplay.py b/act/plotting/geodisplay.py index f26379df39..1356aef231 100644 --- a/act/plotting/geodisplay.py +++ b/act/plotting/geodisplay.py @@ -44,7 +44,7 @@ def __init__(self, ds, ds_name=None, **kwargs): raise ImportError( 'Cartopy needs to be installed on your ' 'system to make geographic display plots.' ) - super().__init__(ds, ds_name, **kwargs) + super().__init__(ds, ds_name, secondary_y_allowed=False, **kwargs) if self.fig is None: self.fig = plt.figure(**kwargs) diff --git a/act/plotting/plot.py b/act/plotting/plot.py index 76ad2693e7..2dccff414b 100644 --- a/act/plotting/plot.py +++ b/act/plotting/plot.py @@ -66,12 +66,16 @@ class with this set to None will create a new figure handle. See the loaded. subplot_kw : dict, optional The kwargs to pass into :func:`fig.subplots` + secondary_y_allowed : boolean + If the plot type allows a secondary y axis + **kwargs : keywords arguments Keyword arguments passed to :func:`plt.figure`. """ - def __init__(self, ds, subplot_shape=(1,), ds_name=None, subplot_kw=None, **kwargs): + def __init__(self, ds, subplot_shape=(1,), ds_name=None, subplot_kw=None, + secondary_y_allowed=True, **kwargs): if isinstance(ds, xr.Dataset): if 'datastream' in ds.attrs.keys() is not None: self._ds = {ds.attrs['datastream']: ds} @@ -119,9 +123,11 @@ def __init__(self, ds, subplot_shape=(1,), ds_name=None, subplot_kw=None, **kwar self.plot_vars = [] self.cbs = [] if subplot_shape is not None: - self.add_subplots(subplot_shape, subplot_kw=subplot_kw, **kwargs) + self.add_subplots(subplot_shape, subplot_kw=subplot_kw, + secondary_y_allowed=secondary_y_allowed, **kwargs) - def add_subplots(self, subplot_shape=(1,), subplot_kw=None, **kwargs): + def add_subplots(self, subplot_shape=(1,), secondary_y=False, subplot_kw=None, + secondary_y_allowed=True, **kwargs): """ Adds subplots to the Display object. The current figure in the object will be deleted and overwritten. @@ -159,10 +165,29 @@ def add_subplots(self, subplot_shape=(1,), subplot_kw=None, **kwargs): self.yrng = np.zeros((subplot_shape[0], 2)) else: raise ValueError('subplot_shape must be a 1 or 2 dimensional' + 'tuple list, or array!') + # Create dummy ax to add secondary y-axes to + if secondary_y_allowed: + dummy_ax = np.empty(list(ax.shape) + [2], dtype=plt.Axes) + for i, axis in enumerate(dummy_ax): + if len(axis.shape) == 1: + dummy_ax[i, 0] = ax[i] + try: + dummy_ax[i, 1] = ax[i].twinx() + except Exception: + dummy_ax[i, 1] = None + else: + for j, axis2 in enumerate(axis): + dummy_ax[i, j, 0] = ax[i, j] + try: + dummy_ax[i, j, 1] = ax[i, j].twinx() + except Exception: + dummy_ax[i, j, 1] = None + else: + dummy_ax = ax self.fig = fig - self.axes = ax + self.axes = dummy_ax - def put_display_in_subplot(self, display, subplot_index): + def put_display_in_subplot(self, display, subplot_index, y_axis_index=0): """ This will place a Display object into a specific subplot. The display object must only have one subplot. @@ -186,11 +211,17 @@ def put_display_in_subplot(self, display, subplot_index): raise RuntimeError( 'Only single plots can be made as subplots ' + 'of another Display object!' ) + if len(np.shape(display.axes)) == 1: + my_projection = display.axes[0].name + else: + my_projection = display.axes[0][y_axis_index].name - my_projection = display.axes[0].name plt.close(display.fig) display.fig = self.fig - self.fig.delaxes(self.axes[subplot_index]) + if len(np.shape(self.axes)) == 1: + self.fig.delaxes(self.axes[subplot_index]) + else: + self.fig.delaxes(self.axes[subplot_index][y_axis_index]) the_shape = self.axes.shape if len(the_shape) == 1: second_value = 1 @@ -261,7 +292,10 @@ def add_colorbar(self, mappable, title=None, subplot_index=(0,), pad=None, raise RuntimeError('add_colorbar requires the plot ' 'to be displayed.') fig = self.fig - ax = self.axes[subplot_index] + if np.size(self.axes[subplot_index]) > 1: + ax = self.axes[subplot_index][0] + else: + ax = self.axes[subplot_index] if pad is None: pad = 0.01 @@ -347,6 +381,9 @@ def plot_group(self, func_name, dsname=None, **kwargs): raise RuntimeError("The specified string is not a function of " "the Display object.") subplot_shape = self.display.axes.shape + if len(subplot_shape) > 2: + subplot_shape = subplot_shape[0:-1] + i = 0 wrap_around = False old_ds = self.display._ds @@ -362,7 +399,7 @@ def plot_group(self, func_name, dsname=None, **kwargs): if len(subplot_shape) == 2: subplot_index = (int(i / subplot_shape[1]), i % subplot_shape[1]) else: - subplot_index = (i % subplot_shape[0],) + subplot_index = (i % subplot_shape[0], 0) args, varargs, varkw, _, _, _, _ = inspect.getfullargspec(func) if "subplot_index" in args: kwargs["subplot_index"] = subplot_index @@ -396,25 +433,33 @@ def plot_group(self, func_name, dsname=None, **kwargs): if len(subplot_shape) == 2: subplot_index = (int(i / subplot_shape[1]), i % subplot_shape[1]) else: - subplot_index = (i % subplot_shape[0],) - self.display.axes[subplot_index].axis('off') + subplot_index = (i % subplot_shape[0], 0) + if np.size(self.display.axes) == 1: + self.display.axes[subplot_index].axis('off') + elif np.size(self.display.axes[subplot_index]) > 1: + self.display.axes[subplot_index][0].axis('off') + self.display.axes[subplot_index][1].axis('off') + else: + self.display.axes[subplot_index].axis('off') i = i + 1 for i in range(1, np.prod(subplot_shape)): if len(subplot_shape) == 2: subplot_index = (int(i / subplot_shape[1]), i % subplot_shape[1]) else: - subplot_index = (i % subplot_shape[0],) + subplot_index = (i % subplot_shape[0], 0) try: self.display.axes[subplot_index].get_legend().remove() except AttributeError: pass - if self.isTimeSeriesDisplay: key_list = list(self.display._ds.keys()) for k in key_list: time_min, time_max = self.xlims[k] - subplot_index = self.mapping[k] + if len(self.mapping[k]) == 1: + subplot_index = self.mapping[k] + (0,) + else: + subplot_index = self.mapping[k] self.display.set_xrng([time_min, time_max], subplot_index) self.display._ds = old_ds diff --git a/act/plotting/skewtdisplay.py b/act/plotting/skewtdisplay.py index 2203d3cf9c..c70875dc86 100644 --- a/act/plotting/skewtdisplay.py +++ b/act/plotting/skewtdisplay.py @@ -56,7 +56,8 @@ def __init__(self, ds, subplot_shape=(1,), subplot=None, ds_name=None, set_fig=N # We want to use our routine to handle subplot adding, not the main # one new_kwargs = kwargs.copy() - super().__init__(ds, None, ds_name, subplot_kw=dict(projection='skewx'), **new_kwargs) + super().__init__(ds, None, ds_name, subplot_kw=dict(projection='skewx'), + secondary_y_allowed=False, **new_kwargs) # Make a SkewT object for each subplot self.add_subplots(subplot_shape, set_fig=set_fig, subplot=subplot, **kwargs) diff --git a/act/plotting/timeseriesdisplay.py b/act/plotting/timeseriesdisplay.py index 948c48028d..4ecc43c80d 100644 --- a/act/plotting/timeseriesdisplay.py +++ b/act/plotting/timeseriesdisplay.py @@ -51,8 +51,8 @@ class TimeSeriesDisplay(Display): """ - def __init__(self, ds, subplot_shape=(1,), ds_name=None, **kwargs): - super().__init__(ds, subplot_shape, ds_name, **kwargs) + def __init__(self, ds, subplot_shape=(1,), ds_name=None, secondary_y_allowed=True, **kwargs): + super().__init__(ds, subplot_shape, ds_name, secondary_y_allowed=True, **kwargs) def day_night_background(self, dsname=None, subplot_index=(0,)): """ @@ -94,7 +94,11 @@ def day_night_background(self, dsname=None, subplot_index=(0,)): if self.axes is None: raise RuntimeError('day_night_background requires the plot to ' 'be displayed.') - ax = self.axes[subplot_index] + # Default to the left axis + if np.size(self.axes[subplot_index]) > 1: + ax = self.axes[subplot_index][0] + else: + ax = self.axes[subplot_index] # Find variable names for latitude and longitude variables = list(self._ds[dsname].data_vars) @@ -196,7 +200,7 @@ def day_night_background(self, dsname=None, subplot_index=(0,)): for ii in noon: ax.axvline(x=ii, linestyle='--', color='y', zorder=1) - def set_xrng(self, xrng, subplot_index=(0,)): + def set_xrng(self, xrng, subplot_index=(0, 0), y_axis_index=0): """ Sets the x range of the plot. @@ -224,8 +228,10 @@ def set_xrng(self, xrng, subplot_index=(0,)): 'Expanding range by 2 seconds.\n') xrng[0] -= dt.timedelta(seconds=1) xrng[1] += dt.timedelta(seconds=1) - - self.axes[subplot_index].set_xlim(xrng) + if np.size(self.axes[subplot_index]) > 1: + self.axes[subplot_index][y_axis_index].set_xlim(xrng) + else: + self.axes[subplot_index].set_xlim(xrng) # Make sure that the xrng value is a numpy array not pandas if isinstance(xrng[0], pd.Timestamp): @@ -242,7 +248,7 @@ def set_xrng(self, xrng, subplot_index=(0,)): self.xrng[subplot_index][0] = xrng[0].astype('datetime64[D]').astype(float) self.xrng[subplot_index][1] = xrng[1].astype('datetime64[D]').astype(float) - def set_yrng(self, yrng, subplot_index=(0,), match_axes_ylimits=False): + def set_yrng(self, yrng, subplot_index=(0,), match_axes_ylimits=False, y_axis_index=0): """ Sets the y range of the plot. @@ -257,6 +263,8 @@ def set_yrng(self, yrng, subplot_index=(0,), match_axes_ylimits=False): If True, all axes in the display object will have matching provided ylims. Default is False. This is especially useful when utilizing a groupby display with many axes. + y_axis_index : int + 0 = left y axis, 1 = right y axis """ if self.axes is None: @@ -274,9 +282,12 @@ def set_yrng(self, yrng, subplot_index=(0,), match_axes_ylimits=False): if match_axes_ylimits: for i in range(self.axes.shape[0]): for j in range(self.axes.shape[1]): - self.axes[i, j].set_ylim(yrng) + self.axes[i, j, y_axis_index].set_ylim(yrng) else: - self.axes[subplot_index].set_ylim(yrng) + if np.size(self.axes[subplot_index]) > 1: + self.axes[subplot_index][y_axis_index].set_ylim(yrng) + else: + self.axes[subplot_index].set_ylim(yrng) try: self.yrng[subplot_index, :] = yrng @@ -287,7 +298,7 @@ def plot( self, field, dsname=None, - subplot_index=(0,), + subplot_index=(0, ), cmap=None, set_title=None, add_nan=False, @@ -393,6 +404,7 @@ def plot( move to right negative values move to left. secondary_y : boolean Option to plot on secondary y axis. + This will automatically change the color of the axis to match the line y_axis_flag_meanings : boolean or int When set to True and plotting state variable with flag_values and flag_meanings attributes will replace y axis numerical values @@ -486,19 +498,27 @@ def plot( else: ydata = None - # Get the current plotting axis, add day/night background and plot data + # Get the current plotting axis if self.fig is None: self.fig = plt.figure() if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) - # Set up secondary y axis if requested if secondary_y is False: - ax = self.axes[subplot_index] + y_axis_index = 0 + if np.size(self.axes[subplot_index]) > 1: + ax = self.axes[subplot_index][y_axis_index] + self.axes[subplot_index][1].get_yaxis().set_visible(False) + else: + ax = self.axes[subplot_index] else: - ax = self.axes[subplot_index].twinx() + y_axis_index = 1 + ax = self.axes[subplot_index][y_axis_index] + self.axes[subplot_index][1].get_yaxis().set_visible(True) + match_line_label_color = True if colorbar_labels is not None: flag_values = list(colorbar_labels.keys()) @@ -656,6 +676,11 @@ def plot( if not y_axis_flag_meanings: if match_line_label_color and len(ax.get_lines()) > 0: ax.set_ylabel(ytitle, color=ax.get_lines()[0].get_color()) + ax.tick_params(axis='y', colors=ax.get_lines()[0].get_color()) + if y_axis_index == 0: + ax.spines['left'].set_color(ax.get_lines()[0].get_color()) + if y_axis_index == 1: + ax.spines['right'].set_color(ax.get_lines()[0].get_color()) else: ax.set_ylabel(ytitle) @@ -715,12 +740,7 @@ def plot( if yrng[1] > current_yrng[1]: yrng[1] = current_yrng[1] - # Set y range the normal way if not secondary y - # If secondary, just use set_ylim - if secondary_y is False: - self.set_yrng(yrng, subplot_index) - else: - ax.set_ylim(yrng) + self.set_yrng(yrng, subplot_index, y_axis_index=y_axis_index) # Set X Format if len(subplot_index) == 1: @@ -762,7 +782,6 @@ def plot( self.add_colorbar( mesh, title=cbar_title, subplot_index=subplot_index, pad=cbar_h_adjust ) - return ax def plot_barbs_from_spd_dir( @@ -969,16 +988,26 @@ def plot_barbs_from_u_v( if self.fig is None: self.fig = plt.figure() + # Set up or get current axes if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) + + # Setting up in case there is a use case in the future for a secondary y + y_axis_index = 0 + + if len(np.shape(self.axes)) == 1: + ax = self.axes[subplot_index] + else: + ax = self.axes[subplot_index][y_axis_index] if ydata is None: ydata = np.ones(xdata.shape) if 'cmap' in kwargs.keys(): map_color = np.sqrt(np.power(u[::barb_step_x], 2) + np.power(v[::barb_step_x], 2)) map_color[np.isnan(map_color)] = 0 - ax = self.axes[subplot_index].barbs( + barbs = ax.barbs( xdata[::barb_step_x], ydata[::barb_step_x], u[::barb_step_x], @@ -987,20 +1016,20 @@ def plot_barbs_from_u_v( **kwargs, ) plt.colorbar( - ax, - ax=[self.axes[subplot_index]], + barbs, + ax=[ax], label='Wind Speed (' + self._ds[dsname][u_field].attrs['units'] + ')', ) else: - self.axes[subplot_index].barbs( + ax.barbs( xdata[::barb_step_x], ydata[::barb_step_x], u[::barb_step_x], v[::barb_step_x], **kwargs, ) - self.axes[subplot_index].set_yticks([]) + ax.set_yticks([]) else: if 'cmap' in kwargs.keys(): @@ -1009,7 +1038,7 @@ def plot_barbs_from_u_v( + np.power(v[::barb_step_x, ::barb_step_y], 2) ) map_color[np.isnan(map_color)] = 0 - ax = self.axes[subplot_index].barbs( + barbs = ax.barbs( xdata[::barb_step_x, ::barb_step_y], ydata[::barb_step_x, ::barb_step_y], u[::barb_step_x, ::barb_step_y], @@ -1018,12 +1047,12 @@ def plot_barbs_from_u_v( **kwargs, ) plt.colorbar( - ax, - ax=[self.axes[subplot_index]], + barbs, + ax=[ax], label='Wind Speed (' + self._ds[dsname][u_field].attrs['units'] + ')', ) else: - ax = self.axes[subplot_index].barbs( + barbs = ax.barbs( xdata[::barb_step_x, ::barb_step_y], ydata[::barb_step_x, ::barb_step_y], u[::barb_step_x, ::barb_step_y], @@ -1044,11 +1073,11 @@ def plot_barbs_from_u_v( ] ) - self.axes[subplot_index].set_title(set_title) + ax.set_title(set_title) # Set YTitle if 'ytitle' in locals(): - self.axes[subplot_index].set_ylabel(ytitle) + ax.set_ylabel(ytitle) # Set X Limit - We want the same time axes for all subplots time_rng = [xdata.min(), xdata.max()] @@ -1085,10 +1114,14 @@ def plot_barbs_from_u_v( # Put on an xlabel, but only if we are making the bottom-most plot if subplot_index[0] == self.axes.shape[0] - 1: - self.axes[subplot_index].set_xlabel('Time [UTC]') + ax.set_xlabel('Time [UTC]') myFmt = common.get_date_format(days) - self.axes[subplot_index].xaxis.set_major_formatter(myFmt) + ax.xaxis.set_major_formatter(myFmt) + if len(np.shape(self.axes)) == 1: + self.axes[subplot_index] = ax + else: + self.axes[subplot_index][y_axis_index] = ax return self.axes[subplot_index] def plot_time_height_xsection_from_1d_data( @@ -1186,11 +1219,21 @@ def plot_time_height_xsection_from_1d_data( if self.fig is None: self.fig = plt.figure() + # Set up or get current axes if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) + + # Setting up in case there is a use case in the future for a secondary y + y_axis_index = 0 - mesh = self.axes[subplot_index].pcolormesh( + if len(np.shape(self.axes)) == 1: + ax = self.axes[subplot_index] + else: + ax = self.axes[subplot_index][y_axis_index] + + mesh = ax.pcolormesh( x_times, y_levels, np.transpose(data), shading=set_shading, **kwargs ) @@ -1207,11 +1250,11 @@ def plot_time_height_xsection_from_1d_data( ] ) - self.axes[subplot_index].set_title(set_title) + ax.set_title(set_title) # Set YTitle if 'ytitle' in locals(): - self.axes[subplot_index].set_ylabel(ytitle) + ax.set_ylabel(ytitle) # Set X Limit - We want the same time axes for all subplots time_rng = [x_times[0], x_times[-1]] @@ -1248,7 +1291,7 @@ def plot_time_height_xsection_from_1d_data( # Put on an xlabel, but only if we are making the bottom-most plot if subplot_index[0] == self.axes.shape[0] - 1: - self.axes[subplot_index].set_xlabel('Time [UTC]') + ax.set_xlabel('Time [UTC]') if ydata is not None: if cbar_label is None: @@ -1256,7 +1299,7 @@ def plot_time_height_xsection_from_1d_data( else: self.add_colorbar(mesh, title=cbar_label, subplot_index=subplot_index) myFmt = common.get_date_format(days) - self.axes[subplot_index].xaxis.set_major_formatter(myFmt) + ax.xaxis.set_major_formatter(myFmt) return self.axes[subplot_index] @@ -1442,10 +1485,15 @@ def qc_flag_block_plot( # Set up or get current axes if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) + + # Setting y_axis_index in case there is a use case in the future + # to plot the QC on the secondary y-axis + y_axis_index = 0 - ax = self.axes[subplot_index] + ax = self.axes[subplot_index][y_axis_index] # Set X Limit - We want the same time axes for all subplots data = self._ds[dsname][data_field] @@ -1719,14 +1767,17 @@ def fill_between( self.fig = plt.figure() if self.axes is None: - self.axes = np.array([plt.axes()]) - self.fig.add_axes(self.axes[0]) + self.axes = np.array([[plt.axes(), plt.axes().twinx()]]) + for a in self.axes[0]: + self.fig.add_axes(a) # Set ax to appropriate axis if secondary_y is False: - ax = self.axes[subplot_index] + y_axis_index = 0 + ax = self.axes[subplot_index][y_axis_index] else: - ax = self.axes[subplot_index].twinx() + y_axis_index = 1 + ax = self.axes[subplot_index][y_axis_index] ax.fill_between(xdata.values, data, **kwargs) @@ -1748,7 +1799,7 @@ def fill_between( # Put on an xlabel, but only if we are making the bottom-most plot if subplot_index[0] == self.axes.shape[0] - 1: - self.axes[subplot_index].set_xlabel('Time [UTC]') + ax.set_xlabel('Time [UTC]') # Set YTitle ax.set_ylabel(ytitle) @@ -1765,5 +1816,5 @@ def fill_between( ) if secondary_y is False: ax.set_title(set_title) - + self.axes[subplot_index][y_axis_index] = ax return self.axes[subplot_index] diff --git a/act/plotting/windrosedisplay.py b/act/plotting/windrosedisplay.py index 365cc1325f..4d7b561e33 100644 --- a/act/plotting/windrosedisplay.py +++ b/act/plotting/windrosedisplay.py @@ -36,7 +36,8 @@ class and has therefore has the same attributes as that class. """ def __init__(self, ds, subplot_shape=(1,), ds_name=None, **kwargs): - super().__init__(ds, subplot_shape, ds_name, subplot_kw=dict(projection='polar'), **kwargs) + super().__init__(ds, subplot_shape, ds_name, subplot_kw=dict(projection='polar'), + secondary_y_allowed=False, **kwargs) def set_thetarng(self, trng=(0.0, 360.0), subplot_index=(0,)): """ @@ -194,8 +195,18 @@ def plot( our_cmap = matplotlib.colormaps.get_cmap(cmap) our_colors = our_cmap(np.linspace(0, 1, len(spd_bins))) + # Make sure we're dealing with the right axes style + if len(np.shape(self.axes)) == 1: + ax = self.axes[subplot_index] + if np.size(ax) > 1: + ax = ax[0] + elif len(self.axes[subplot_index]) == 2: + ax = self.axes[subplot_index][0] + else: + ax = self.axes[subplot_index] + bars = [ - self.axes[subplot_index].bar( + ax.bar( mins, wind_hist[:, 0], bottom=0, @@ -210,7 +221,7 @@ def plot( # Changing the bottom to be a sum of the previous speeds so that # it positions it correctly - Adam Theisen bars.append( - self.axes[subplot_index].bar( + ax.bar( mins, wind_hist[:, i], label=the_label, @@ -220,16 +231,16 @@ def plot( **kwargs, ) ) - self.axes[subplot_index].legend( + ax.legend( loc=legend_loc, bbox_to_anchor=legend_bbox, title=legend_title ) - self.axes[subplot_index].set_theta_zero_location('N') - self.axes[subplot_index].set_theta_direction(-1) + ax.set_theta_zero_location('N') + ax.set_theta_direction(-1) # Add an annulus with text stating % of time calm pct_calm = np.sum(spd_data <= calm_threshold) / len(spd_data) * 100 - self.axes[subplot_index].set_rorigin(-2.5) - self.axes[subplot_index].annotate( + ax.set_rorigin(-2.5) + ax.annotate( '%3.2f%%\n calm' % pct_calm, xy=(0, -2.5), ha='center', va='center' ) @@ -237,8 +248,8 @@ def plot( tick_max = tick_interval * round(np.nanmax(np.cumsum(wind_hist, axis=1)) / tick_interval) rticks = np.arange(0, tick_max, tick_interval) rticklabels = [('%d' % x + '%') for x in rticks] - self.axes[subplot_index].set_rticks(rticks) - self.axes[subplot_index].set_yticklabels(rticklabels) + ax.set_rticks(rticks) + ax.set_yticklabels(rticklabels) # Set Title if set_title is None: @@ -249,8 +260,16 @@ def plot( dt_utils.numpy_to_arm_date(self._ds[dsname].time.values[0]), ] ) - self.axes[subplot_index].set_title(set_title) - return self.axes[subplot_index] + ax.set_title(set_title) + + if len(np.shape(self.axes)) == 1: + self.axes[subplot_index] = ax + elif len(self.axes[subplot_index]) == 2: + self.axes[subplot_index][0] = ax + else: + self.axes[subplot_index] = ax + + return ax def plot_data( self, diff --git a/act/plotting/xsectiondisplay.py b/act/plotting/xsectiondisplay.py index d989594c0c..86e2a8ef51 100644 --- a/act/plotting/xsectiondisplay.py +++ b/act/plotting/xsectiondisplay.py @@ -72,7 +72,7 @@ class and has therefore has the same attributes as that class. """ def __init__(self, ds, subplot_shape=(1,), ds_name=None, **kwargs): - super().__init__(ds, subplot_shape, ds_name, **kwargs) + super().__init__(ds, subplot_shape, ds_name, secondary_y_allowed=False, **kwargs) def set_subplot_to_map(self, subplot_index): total_num_plots = self.axes.shape diff --git a/act/tests/baseline/test_secondary_y.png b/act/tests/baseline/test_secondary_y.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce523778a41984d05639c6c675796747c6e1f46 GIT binary patch literal 79665 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