Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
117 commits
Select commit Hold shift + click to select a range
234d4e8
update version for rc1 release
georgemccabe Sep 30, 2025
329fb55
remove hard-coded version because it is read from metplotpy/_version.py
georgemccabe Oct 16, 2025
f7e7e85
Feature 550 v3.2.0 (#551)
bikegeek Nov 14, 2025
2667b4c
Update for 3.2 release and Python 3.12
jprestop Dec 9, 2025
aa0bc12
Add modulefile for smac-c5
jprestop Dec 16, 2025
dba3bab
Hotfix to add missing METcalcpy links to the RTD navigation.
JohnHalleyGotway Dec 23, 2025
0e23351
Issue #556 this is the original BasePlot class, containing Plotly and…
bikegeek Jan 21, 2026
df0dc9e
Per #556, create _plotly versions of util.py, constants.py, and confi…
georgemccabe Jan 22, 2026
1a38b17
Do not use util.apply_weight_style -- it adds html which isn't used b…
georgemccabe Jan 22, 2026
036903f
Merge branch 'feature_555_replace_plotly' into feature_556_copy_base_…
georgemccabe Jan 28, 2026
ceb5802
add fix for creating parent directories to plotly version of base plot
georgemccabe Jan 28, 2026
18aa26b
Merge branch 'develop' of https://github.com/dtcenter/METplotpy into …
bikegeek Feb 2, 2026
69d5b38
hotfix: fix handling of missing data by changing replace value from s…
georgemccabe Feb 3, 2026
150a3c7
hotfix: remove string representing color that causes UserWarning and …
georgemccabe Feb 3, 2026
6fe7771
Merge branch 'develop' of https://github.com/dtcenter/METplotpy into …
bikegeek Feb 4, 2026
a9faf5b
merged develop and resolved conflicts
georgemccabe Feb 4, 2026
4ac83eb
add workflow dispatch option to unit tests so development branches ca…
georgemccabe Feb 4, 2026
74fc7aa
Merge branch 'feature_555_replace_plotly' into feature_556_copy_base_…
georgemccabe Feb 5, 2026
b664740
remove more plotly-specific stuff from matplotlib version
georgemccabe Feb 5, 2026
479c172
Update copyright.txt
bikegeek Feb 5, 2026
f8d47f5
Merge branch 'feature_556_copy_base_and_common_functionality' of http…
bikegeek Feb 5, 2026
c7cae0c
Merge branch 'develop' of https://github.com/dtcenter/METplotpy into …
bikegeek Feb 5, 2026
07cf5bd
Issue #556 Remove any Plotly-specific code and imports. Update copyr…
bikegeek Feb 5, 2026
fd6e39c
Merge branch 'feature_555_replace_plotly' into feature_556_copy_base_…
georgemccabe Feb 6, 2026
b616fcd
clean up logic to calculate plot dimensions to always use matplotlib …
georgemccabe Feb 6, 2026
3bc22fd
remove plotly-specific variables and update incorrect imports to use …
georgemccabe Feb 6, 2026
fda41c5
resolve SonarQube complaints and clean up logic
georgemccabe Feb 6, 2026
392ee95
more SonarQube issues resolved
georgemccabe Feb 6, 2026
0ab7528
Issue #556 Updates to base_plot to support title,caption, x-axis labe…
bikegeek Feb 6, 2026
c8bb31d
Merge branch 'feature_556_copy_base_and_common_functionality' of http…
bikegeek Feb 7, 2026
14469fb
Issue #556 use the get_weights_size_style() from base_plot.py to plot…
bikegeek Feb 7, 2026
ad3c90f
Fixed comment to remove Plotly reference in
bikegeek Feb 7, 2026
1c0d319
Revert to previous version, which already removed Plotly-specific cod…
bikegeek Feb 7, 2026
6f68ae8
Added TODO for code that should be removed when all plots have been m…
bikegeek Feb 7, 2026
f92761a
Added TODO comments to identify code that will need to be removed whe…
bikegeek Feb 7, 2026
b7e827d
remove plotly variables from matplotlib version
georgemccabe Feb 9, 2026
4467a90
remove unneeded import
georgemccabe Feb 9, 2026
f10a8a0
Per #558, refactor bar plot to use matplotlib instead of plotly
georgemccabe Feb 10, 2026
5c71d9d
Revert back to using _get_fcst_vars to avoid breaking things, but add…
georgemccabe Feb 17, 2026
9e0979f
added default widths of some matplotlib shapes
georgemccabe Feb 17, 2026
d1477d6
added back _get_fcst_vars override to avoid breaking things for now. …
georgemccabe Feb 17, 2026
8917e01
move more common functionality into the base plot class so it can be …
georgemccabe Feb 17, 2026
021f923
Progress towards creating box plots using matplotlib. Adjustment is s…
georgemccabe Feb 17, 2026
a4fcdd9
fix incorrectly formatted show_legend values that are interpreted as …
georgemccabe Feb 17, 2026
5f81621
handle multiple test_*.py files in a test directory by checking the n…
georgemccabe Feb 17, 2026
77b09e2
move caption_weight handling to base config
georgemccabe Feb 24, 2026
3faba15
progress towards getting revision_box working utilizing as much from …
georgemccabe Feb 24, 2026
dae5318
merged feature_555_remove_plotly and resolved conflicts
georgemccabe Feb 26, 2026
7bbe59e
move default config seetings that are not set by all of the plots to …
georgemccabe Feb 27, 2026
2c51ea4
Per #558, update histogram plot to use matplotlib instead of plotly
georgemccabe Feb 27, 2026
369dad3
add support for custom lines
georgemccabe Feb 27, 2026
d35fe90
fix number of columns in legend to match original R plot
georgemccabe Feb 27, 2026
4f33a79
turn off grid to match original R plot
georgemccabe Feb 27, 2026
fc2eec7
Refactored config consistency checking to be consistent across multip…
georgemccabe Feb 27, 2026
58eb4dd
after updating config consistency check logic, fix incorrect yaml val…
georgemccabe Feb 27, 2026
94383dd
added mean line, adjusted median line, and added logic to more closel…
georgemccabe Feb 27, 2026
c922238
adjusted config value to stretch whisker to outlier point to more clo…
georgemccabe Feb 27, 2026
3879114
improve handling of situation when fcst vars are not set in config
georgemccabe Feb 27, 2026
13cb39d
use explicit function to get fcst var keys instead of dict
georgemccabe Feb 27, 2026
53140c3
adjust settings for whis and showfliers to more closely match the plo…
georgemccabe Mar 2, 2026
ef51ddf
change value back to original because plot should create the same for…
georgemccabe Mar 2, 2026
d0e3b56
updates to get revision box plots to render (more) correctly and so t…
georgemccabe Mar 2, 2026
63e91a7
remove commented code and out-of-date comments
georgemccabe Mar 2, 2026
67c5a3f
test copying files with differences to a diff artifact
georgemccabe Mar 3, 2026
1523642
create diff artifact even when the step before it fails due to diffs
georgemccabe Mar 3, 2026
e53688e
fix issues with hovmoeller test plot by closing global matplotlib plt…
georgemccabe Mar 4, 2026
db8b376
Update matplotlib plots to call self.save_to_file instead of plt.save…
georgemccabe Mar 5, 2026
ad9f086
use develop version of diff util after changes were merged
georgemccabe Mar 5, 2026
4a8bb99
only set xticks if indy_label is set in config object
georgemccabe Mar 6, 2026
05ae5f4
set variable in base config instead of in each plot configs
georgemccabe Mar 6, 2026
fc68df8
add plotly marker strings to dictionary to convert to matplotlib marker
georgemccabe Mar 6, 2026
43191df
clean up formatting and remove duplicate variables that were accident…
georgemccabe Mar 6, 2026
03f5c7f
move another variable to base config
georgemccabe Mar 6, 2026
3f9e5a9
Per #569, progress towards replacing plotly with matplotlib for ROC d…
georgemccabe Mar 6, 2026
65a4459
remove redundant config function override that does the same thing as…
georgemccabe Mar 6, 2026
7ef2aae
remove commented code that is no longer used since we are using matpl…
georgemccabe Mar 6, 2026
74e10d0
turn off grid to more closely match expected image
georgemccabe Mar 6, 2026
df7b582
move path variables to top for each reference
georgemccabe Mar 6, 2026
2ab1584
remove html file checks from tests since we no longer create them
georgemccabe Mar 6, 2026
f0707c9
fix incorrect location of caption by overriding _add_caption function…
georgemccabe Mar 6, 2026
6086c88
clean up
georgemccabe Mar 6, 2026
ccd2d1a
Merge branch 'feature_558_bar' into feature_569_roc
georgemccabe Mar 6, 2026
794d0db
resolve SonarQube issues
georgemccabe Mar 11, 2026
d1b7ef7
add a note to review functionality and improve error checking if needed
georgemccabe Mar 11, 2026
f6964c1
handle title that contains html line breaks
georgemccabe Mar 11, 2026
395e1de
add function to base config to get string to define plot mode, e.g. l…
georgemccabe Mar 11, 2026
fd1b546
progress towards replacing plotly with matplotlib for reliability dia…
georgemccabe Mar 11, 2026
443cc88
adjust title in vertical dimension
georgemccabe Mar 11, 2026
2972c61
Use indy_vals as the x tick locations if they are numeric, otherwise …
georgemccabe Mar 11, 2026
5e446cb
ensure the reliability axes go from 0-1
georgemccabe Mar 11, 2026
b84ca35
adjust settings to more closely match expected image
georgemccabe Mar 11, 2026
1a70c02
Attempt to improve the appearance of the error bars. The example conf…
georgemccabe Mar 11, 2026
6f99672
clean up, removing old plotly code that is no longer needed
georgemccabe Mar 11, 2026
58189cb
ignore auto-generated files
georgemccabe Mar 12, 2026
5875710
move config check that is specific to box plot and was preventing ens…
georgemccabe Mar 12, 2026
dae8d69
move marker size function to base config to be used by multiple plots
georgemccabe Mar 12, 2026
3bc72be
convert ens_ss plot from plotly to matplotlib
georgemccabe Mar 12, 2026
bf517e2
remove function that was moved to base config
georgemccabe Mar 12, 2026
886c42e
fix badly formatted show_legend values and moved path variables to to…
georgemccabe Mar 12, 2026
6339912
fix issues with x-axis labels/ticks that was introduced with changes …
georgemccabe Mar 12, 2026
0ff95a7
decouple functions that don't need to be perform multiple tasks
georgemccabe Mar 12, 2026
760b36e
merge feature_555 and resolve conflicts
georgemccabe Mar 12, 2026
aa49ebc
merge feature_555 again and resolve more conflicts
georgemccabe Mar 12, 2026
f3c3fe2
Per #557, progress towards switching line plot to use matplotlib inst…
georgemccabe Mar 13, 2026
1ca8fbb
add caps to error bars
georgemccabe Mar 17, 2026
6735b4c
fix bad formatting in config files
georgemccabe Mar 17, 2026
8cf6130
clean up write output file function to reduce cognitive complexity pe…
georgemccabe Mar 17, 2026
fe7a032
Per #557, convert eclv plot from plotly to matplotlib, reusing as muc…
georgemccabe Mar 17, 2026
b94179c
set default dashed lines to be longer and wider spaced to more closel…
georgemccabe Mar 19, 2026
74edbce
Per #557, convert equivalence testing bounds plot from plotly to matp…
georgemccabe Mar 19, 2026
e51158e
remove redundant overrides of function to get plot display config set…
georgemccabe Mar 19, 2026
333e540
globally remove spines from top and right of plots
georgemccabe Mar 19, 2026
294f2ef
remove specific conda env to use
georgemccabe Mar 19, 2026
877702e
Per #557, convert revision series plot from plotly to matplotlib
georgemccabe Mar 19, 2026
1b0a639
adjust settings so output image more closely matches expected image
georgemccabe Mar 19, 2026
6f2a469
Merge branch 'feature_555_replace_plotly' into feature_557_line_gpm
georgemccabe Mar 19, 2026
19b44f4
Per #572, convert contour plot from plotly to matplotlib
georgemccabe Mar 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 0 additions & 24 deletions metplotpy/plots/bar/bar_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,30 +111,6 @@ def __init__(self, parameters: dict) -> None:
self.legend_orientation = 'h'
self.show_legend = self._get_show_legend()


def _get_plot_disp(self) -> list:
"""
Retrieve the values that determine whether to display a particular series
and convert them to bool if needed

Args:

Returns:
A list of boolean values indicating whether or not to
display the corresponding series
"""

plot_display_config_vals = self.get_config_value('plot_disp')
plot_display_bools = []
for val in plot_display_config_vals:
if isinstance(val, bool):
plot_display_bools.append(val)

if isinstance(val, str):
plot_display_bools.append(val.upper() == 'TRUE')

return self.create_list_by_series_ordering(plot_display_bools)

def _get_fcst_vars(self, index):
"""
Retrieve a list of the inner keys (fcst_vars) to the fcst_var_val dictionary.
Expand Down
126 changes: 99 additions & 27 deletions metplotpy/plots/base_plot.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@
from . import constants


###
# Global matplotlib default setting overrides
###

# set default for dashed lines to be longer and wider spaced
plt.rcParams['lines.dashed_pattern'] = [10, 10]

# Turn off spines globally
plt.rcParams['axes.spines.top'] = False
plt.rcParams['axes.spines.right'] = False

turn_on_logging = strtobool('LOG_BASE_PLOT')
# Log when Chrome is downloaded at runtime
if turn_on_logging:
Expand Down Expand Up @@ -401,28 +412,20 @@ def _add_legend(self, ax: plt.Axes, handles_and_labels=None) -> None:

def _add_xaxis(self, ax: plt.Axes, fontproperties: FontProperties, label=None, grid_on=None) -> None:
"""
Configures and adds x-axis to the plot
Configures and adds x-axis to the plot. Handles vertical plot by switching x and y axis.
"""
is_vert = getattr(self.config_obj, 'vert_plot', False)
if label is None:
label = self.config_obj.xaxis
label = self.config_obj.xaxis if not is_vert else self.config_obj.yaxis_1

if grid_on is None:
grid_on = self.config_obj.grid_on

ax.set_xlabel(label, fontproperties=fontproperties,
labelpad=abs(self.config_obj.parameters['xlab_offset']) * constants.PIXELS_TO_POINTS)

if self.config_obj.indy_label:
# use the indices as tick locations
xtick_locs = np.arange(len(self.config_obj.indy_label))
if self.config_obj.indy_vals:
# Use the actual numeric values from indy_vals as tick locations
try:
xtick_locs = [float(i) for i in self.config_obj.indy_vals]
# if they are not numeric, revert to using the indices
except ValueError:
pass

if self.config_obj.indy_label and not is_vert:
xtick_locs = self._get_xtick_locs()
ax.set_xticks(xtick_locs, self.config_obj.indy_label)

ax.tick_params(axis="x", direction="in", which="both", labelrotation=self.config_obj.x_tickangle)
Expand All @@ -431,30 +434,73 @@ def _add_xaxis(self, ax: plt.Axes, fontproperties: FontProperties, label=None, g
linestyle='-', linewidth=self.config_obj.parameters['grid_lwd'])
ax.set_axisbelow(True)

if self.config_obj.xaxis_reverse:
ax.invert_xaxis()
if not is_vert:
if len(self.config_obj.parameters['xlim']) > 0:
# TODO: support xlim_step? only used for line plots
ax.set_xlim(self.config_obj.parameters['xlim'])
elif getattr(self.config_obj, 'start_from_zero', False):
xtick_locs = self._get_xtick_locs()
if len(xtick_locs) > 0:
ax.set_xlim(min(xtick_locs), max(xtick_locs))

if self.config_obj.xaxis_reverse:
ax.invert_xaxis()
else:
if len(self.config_obj.parameters['ylim']) > 0:
ax.set_xlim(self.config_obj.parameters['ylim'])

def _add_yaxis(self, ax: plt.Axes, fontproperties: FontProperties, label=None, grid_on=None) -> None:
"""
Configures and adds y-axis to the plot
Configures and adds y-axis to the plot. Handles vertical plot by switching x and y axis.
"""
is_vert = getattr(self.config_obj, 'vert_plot', False)
if label is None:
label = self.config_obj.yaxis_1
label = self.config_obj.yaxis_1 if not is_vert else self.config_obj.xaxis

if grid_on is None:
grid_on = self.config_obj.grid_on

ax.set_ylabel(label, fontproperties=fontproperties,
labelpad=abs(self.config_obj.parameters['ylab_offset']) * constants.PIXELS_TO_POINTS)
ax.tick_params(axis="y", direction="in", which="both", labelrotation=self.config_obj.y_tickangle)

# set y limits if defined in config or if min/max are provided
if len(self.config_obj.parameters['ylim']) > 0:
if not is_vert and len(self.config_obj.parameters['ylim']) > 0:
ax.set_ylim(self.config_obj.parameters['ylim'])

# add grid lines if requested
if grid_on:
ax.grid(True, which='major', axis='y', color=self.config_obj.blended_grid_col, linestyle='-', linewidth=self.config_obj.parameters['grid_lwd'])
ax.set_axisbelow(True)

if not is_vert:
if len(self.config_obj.parameters['ylim']) > 0:
ax.set_ylim(self.config_obj.parameters['ylim'])
else:
if self.config_obj.indy_label:
xtick_locs = self._get_xtick_locs()
ax.set_yticks(xtick_locs, self.config_obj.indy_label)

if getattr(self.config_obj, 'start_from_zero', False):
if len(xtick_locs) > 0:
ax.set_ylim(min(xtick_locs), max(xtick_locs))

if self.config_obj.xaxis_reverse:
ax.invert_yaxis()

def _get_xtick_locs(self):
# use the indices as tick locations
xtick_locs = np.arange(len(self.config_obj.indy_label))
if self.config_obj.indy_vals:
# Use the actual numeric values from indy_vals as tick locations
try:
xtick_locs = [float(i) for i in self.config_obj.indy_vals]
# if they are not numeric, revert to using the indices
except ValueError:
pass

return xtick_locs

def _add_x2axis(self, ax, n_stats, fontproperties: FontProperties) -> None:
"""
Creates x2axis based on the properties from the config file.
Expand All @@ -472,14 +518,24 @@ def _add_x2axis(self, ax, n_stats, fontproperties: FontProperties) -> None:
if not self.config_obj.show_nstats:
return

ax_top = ax.secondary_xaxis('top')
ax_top.set_xlabel('NStats', fontproperties=fontproperties,
labelpad=abs(self.config_obj.parameters['x2lab_offset']) * constants.PIXELS_TO_POINTS)
current_locs = ax.get_xticks()
ax_top.set_xticks(current_locs, n_stats, size=self.config_obj.x2_tickfont_size)
label_args = {
'fontproperties': fontproperties,
'labelpad': abs(self.config_obj.parameters['x2lab_offset']) * constants.PIXELS_TO_POINTS,
}

if not self.config_obj.vert_plot:
ax_top = ax.secondary_xaxis('top')
ax_top.set_xlabel('NStats', **label_args)
current_locs = ax.get_xticks()
ax_top.set_xticks(current_locs, n_stats, size=self.config_obj.x2_tickfont_size)

# this doesn't appear to be working to add ticks at the top
ax_top.tick_params(axis="x", direction="in", labelrotation=self.config_obj.x2_tickangle)
# this doesn't appear to be working to add ticks at the top
ax_top.tick_params(axis="x", direction="in", labelrotation=self.config_obj.x2_tickangle)
else:
ax_right = ax.secondary_yaxis('right')
ax_right.set_ylabel('NStats', **label_args)
current_locs = ax.get_yticks()
ax_right.set_yticks(current_locs, n_stats, size=self.config_obj.x2_tickfont_size)

def _add_y2axis(self, ax: plt.Axes, fontproperties: Union[FontProperties, None]):
"""
Expand All @@ -495,6 +551,19 @@ def _add_y2axis(self, ax: plt.Axes, fontproperties: Union[FontProperties, None])

return ax_right

def _sync_yaxes(self, ax, ax2, yaxis_min: Union[float, None], yaxis_max: Union[float, None]):
if not self.config_obj.sync_yaxes or self.config_obj.vert_plot:
return

# set y limits if defined in config or if min/max are provided
if len(self.config_obj.parameters['ylim']) > 0:
yaxis_min = self.config_obj.parameters['ylim'][0]
yaxis_max = self.config_obj.parameters['ylim'][1]

if yaxis_min is not None and yaxis_max is not None:
ax.set_ylim(yaxis_min, yaxis_max)
ax2.set_ylim(yaxis_min, yaxis_max)

def _add_lines(self, ax: plt.Axes, config_obj: Config, x_points_index: Union[list, None] = None) -> None:
"""Adds custom horizontal and/or vertical line to the plot.
All line's metadata is in the config_obj.lines
Expand Down Expand Up @@ -539,7 +608,10 @@ def _add_lines(self, ax: plt.Axes, config_obj: Config, x_points_index: Union[lis
self.logger.warning(msg)
print(f"WARNING: {msg}")

def _get_x_locs_and_width(self, x_points, index):
def _get_x_locs_and_width(self, x_points, index, stagger_scale=None):
if stagger_scale is None:
stagger_scale = constants.MPL_DEFAULT_BAR_WIDTH

try:
# Attempt to convert x_points to floats (handles numeric indy_vals)
# Threshold values (e.g., ">5.0") will raise a ValueError/TypeError
Expand All @@ -565,7 +637,7 @@ def _get_x_locs_and_width(self, x_points, index):
n = max(n_visible_series, 1)

# Scale width and offset by min_spacing to ensure bars fit within the numeric gaps
width = (min_spacing * constants.MPL_DEFAULT_BAR_WIDTH) / n
width = (min_spacing * stagger_scale) / n
offset = (index - (n - 1) / 2.0) * width
x_locs = base + offset
return x_locs, width
13 changes: 0 additions & 13 deletions metplotpy/plots/box/box.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,19 +200,6 @@ def _add_custom_lines(self, ax):
if len(self.series_list) > 0:
self._add_lines(ax, self.config_obj, self.config_obj.indy_vals)

def _sync_yaxes(self, ax, ax2, yaxis_min: Union[float, None], yaxis_max: Union[float, None]):
if not self.config_obj.sync_yaxes:
return

# set y limits if defined in config or if min/max are provided
if len(self.config_obj.parameters['ylim']) > 0:
yaxis_min = self.config_obj.parameters['ylim'][0]
yaxis_max = self.config_obj.parameters['ylim'][1]

if yaxis_min is not None and yaxis_max is not None:
ax.set_ylim(yaxis_min, yaxis_max)
ax2.set_ylim(yaxis_min, yaxis_max)

def _draw_series(self, ax: plt.Axes, ax2, series: BoxSeries, idx: int):
"""
Draws the boxes on the plot
Expand Down
23 changes: 0 additions & 23 deletions metplotpy/plots/box/box_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,29 +155,6 @@ def __init__(self, parameters: dict) -> None:
self.showfliers = False
self.boxpoints = False

def _get_plot_disp(self) -> list:
"""
Retrieve the values that determine whether to display a particular series
and convert them to bool if needed

Args:

Returns:
A list of boolean values indicating whether or not to
display the corresponding series
"""

plot_display_config_vals = self.get_config_value('plot_disp')
plot_display_bools = []
for val in plot_display_config_vals:
if isinstance(val, bool):
plot_display_bools.append(val)

if isinstance(val, str):
plot_display_bools.append(val.upper() == 'TRUE')

return self.create_list_by_series_ordering(plot_display_bools)

def _get_fcst_vars(self, index):
"""
Retrieve a list of the inner keys (fcst_vars) to the fcst_var_val dictionary.
Expand Down
24 changes: 24 additions & 0 deletions metplotpy/plots/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def __init__(self, parameters):
self.title_color = constants.DEFAULT_TITLE_COLOR
self.xaxis = self.get_config_value('xaxis')
self.xaxis_reverse = False
self.vert_plot = False
self.yaxis_1 = self.get_config_value('yaxis_1')
self.yaxis_2 = self.get_config_value('yaxis_2')
self.sync_yaxes = False
Expand Down Expand Up @@ -744,6 +745,29 @@ def _get_plot_resolution(self) -> int:
# dpi used by matplotlib
return dpi

def _get_plot_disp(self) -> list:
"""
Retrieve the values that determine whether to display a particular series
and convert them to bool if needed

Args:

Returns:
A list of boolean values indicating whether or not to
display the corresponding series
"""

plot_display_config_vals = self.get_config_value('plot_disp')
plot_display_bools = []
for val in plot_display_config_vals:
if isinstance(val, bool):
plot_display_bools.append(val)

if isinstance(val, str):
plot_display_bools.append(val.upper() == 'TRUE')

return self.create_list_by_series_ordering(plot_display_bools)

def _convert_units_to_inches(self, value, units):
units_lower = units.lower()
if units_lower == 'mm':
Expand Down
Loading
Loading