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

eprh.hfss_report_full_convergence sometimes fails due to negative values in log-scale #137

Open
nikosavola opened this issue Aug 11, 2022 · 0 comments

Comments

@nikosavola
Copy link
Contributor

Calling eprh.hfss_report_full_convergence sometimes results in ValueError: Data has no positive values, and therefore can not be log-scaled.

In this case, the simulations did not converge into tight criterion, but behaved normally

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [14], in <cell line: 1>()
----> 1 eprh.hfss_report_full_convergence()

File c:\users\iqm\pyepr\pyEPR\core_distributed_analysis.py:1637, in DistributedAnalysis.hfss_report_full_convergence(self, fig, _display)
   1633 plot_convergence_solved_elem(ax0t, convergence_t.iloc[:, 0])
   1634 plot_convergence_maxdf_vs_sol(axs[2], convergence_t.iloc[:, 1],
   1635                               convergence_t.iloc[:, 0])
-> 1637 fig.tight_layout(w_pad=0.1)  # pad=0.0, w_pad=0.1, h_pad=1.0)
   1639 if _display:
   1640     from IPython.display import display

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\figure.py:3197, in Figure.tight_layout(self, pad, h_pad, w_pad, rect)
   3195 renderer = _get_renderer(self)
   3196 with getattr(renderer, "_draw_disabled", nullcontext)():
-> 3197     kwargs = get_tight_layout_figure(
   3198         self, self.axes, subplotspec_list, renderer,
   3199         pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
   3200 if kwargs:
   3201     self.subplots_adjust(**kwargs)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\tight_layout.py:320, in get_tight_layout_figure(fig, axes_list, subplotspec_list, renderer, pad, h_pad, w_pad, rect)
    315         return {}
    316     span_pairs.append((
    317         slice(ss.rowspan.start * div_row, ss.rowspan.stop * div_row),
    318         slice(ss.colspan.start * div_col, ss.colspan.stop * div_col)))
--> 320 kwargs = _auto_adjust_subplotpars(fig, renderer,
    321                                   shape=(max_nrows, max_ncols),
    322                                   span_pairs=span_pairs,
    323                                   subplot_list=subplot_list,
    324                                   ax_bbox_list=ax_bbox_list,
    325                                   pad=pad, h_pad=h_pad, w_pad=w_pad)
    327 # kwargs can be none if tight_layout fails...
    328 if rect is not None and kwargs is not None:
    329     # if rect is given, the whole subplots area (including
    330     # labels) will fit into the rect instead of the
   (...)
    334     # auto_adjust_subplotpars twice, where the second run
    335     # with adjusted rect parameters.

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\tight_layout.py:82, in _auto_adjust_subplotpars(fig, renderer, shape, span_pairs, subplot_list, ax_bbox_list, pad, h_pad, w_pad, rect)
     80 if ax.get_visible():
     81     try:
---> 82         bb += [ax.get_tightbbox(renderer, for_layout_only=True)]
     83     except TypeError:
     84         bb += [ax.get_tightbbox(renderer)]

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axes\_base.py:4628, in _AxesBase.get_tightbbox(self, renderer, call_axes_locator, bbox_extra_artists, for_layout_only)
   4626 if self.yaxis.get_visible():
   4627     try:
-> 4628         bb_yaxis = self.yaxis.get_tightbbox(
   4629             renderer, for_layout_only=for_layout_only)
   4630     except TypeError:
   4631         # in case downstream library has redefined axis:
   4632         bb_yaxis = self.yaxis.get_tightbbox(renderer)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1103, in Axis.get_tightbbox(self, renderer, for_layout_only)
   1100 if not self.get_visible():
   1101     return
-> 1103 ticks_to_draw = self._update_ticks()
   1105 self._update_label_position(renderer)
   1107 # go back to just this axis's tick labels

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1045, in Axis._update_ticks(self)
   1040 def _update_ticks(self):
   1041     """
   1042     Update ticks (position and labels) using the current data interval of
   1043     the axes.  Return the list of ticks that will be drawn.
   1044     """
-> 1045     major_locs = self.get_majorticklocs()
   1046     major_labels = self.major.formatter.format_ticks(major_locs)
   1047     major_ticks = self.get_major_ticks(len(major_locs))

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1277, in Axis.get_majorticklocs(self)
   1275 def get_majorticklocs(self):
   1276     """Return this Axis' major tick locations in data coordinates."""
-> 1277     return self.major.locator()

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\ticker.py:2292, in LogLocator.__call__(self)
   2290 """Return the locations of the ticks."""
   2291 vmin, vmax = self.axis.get_view_interval()
-> 2292 return self.tick_values(vmin, vmax)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\ticker.py:2317, in LogLocator.tick_values(self, vmin, vmax)
   2314         vmin = self.axis.get_minpos()
   2316     if vmin <= 0.0 or not np.isfinite(vmin):
-> 2317         raise ValueError(
   2318             "Data has no positive values, and therefore can not be "
   2319             "log-scaled.")
   2321 _log.debug('vmin %s vmax %s', vmin, vmax)
   2323 if vmax < vmin:

ValueError: Data has no positive values, and therefore can not be log-scaled.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib_inline\backend_inline.py:43, in show(close, block)
     39 try:
     40     for figure_manager in Gcf.get_all_fig_managers():
     41         display(
     42             figure_manager.canvas.figure,
---> 43             metadata=_fetch_figure_metadata(figure_manager.canvas.figure)
     44         )
     45 finally:
     46     show._to_draw = []

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib_inline\backend_inline.py:231, in _fetch_figure_metadata(fig)
    228 # determine if a background is needed for legibility
    229 if _is_transparent(fig.get_facecolor()):
    230     # the background is transparent
--> 231     ticksLight = _is_light([label.get_color()
    232                             for axes in fig.axes
    233                             for axis in (axes.xaxis, axes.yaxis)
    234                             for label in axis.get_ticklabels()])
    235     if ticksLight.size and (ticksLight == ticksLight[0]).all():
    236         # there are one or more tick labels, all with the same lightness
    237         return {'needs_background': 'dark' if ticksLight[0] else 'light'}

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib_inline\backend_inline.py:234, in <listcomp>(.0)
    228 # determine if a background is needed for legibility
    229 if _is_transparent(fig.get_facecolor()):
    230     # the background is transparent
    231     ticksLight = _is_light([label.get_color()
    232                             for axes in fig.axes
    233                             for axis in (axes.xaxis, axes.yaxis)
--> 234                             for label in axis.get_ticklabels()])
    235     if ticksLight.size and (ticksLight == ticksLight[0]).all():
    236         # there are one or more tick labels, all with the same lightness
    237         return {'needs_background': 'dark' if ticksLight[0] else 'light'}

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1249, in Axis.get_ticklabels(self, minor, which)
   1247 if minor:
   1248     return self.get_minorticklabels()
-> 1249 return self.get_majorticklabels()

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1201, in Axis.get_majorticklabels(self)
   1199 def get_majorticklabels(self):
   1200     """Return this Axis' major tick labels, as a list of `~.text.Text`."""
-> 1201     ticks = self.get_major_ticks()
   1202     labels1 = [tick.label1 for tick in ticks if tick.label1.get_visible()]
   1203     labels2 = [tick.label2 for tick in ticks if tick.label2.get_visible()]

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1371, in Axis.get_major_ticks(self, numticks)
   1369 r"""Return the list of major `.Tick`\s."""
   1370 if numticks is None:
-> 1371     numticks = len(self.get_majorticklocs())
   1373 while len(self.majorTicks) < numticks:
   1374     # Update the new tick label properties from the old.
   1375     tick = self._get_tick(major=True)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\axis.py:1277, in Axis.get_majorticklocs(self)
   1275 def get_majorticklocs(self):
   1276     """Return this Axis' major tick locations in data coordinates."""
-> 1277     return self.major.locator()

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\ticker.py:2292, in LogLocator.__call__(self)
   2290 """Return the locations of the ticks."""
   2291 vmin, vmax = self.axis.get_view_interval()
-> 2292 return self.tick_values(vmin, vmax)

File ~\AppData\Local\Programs\Python\Python39\lib\site-packages\matplotlib\ticker.py:2317, in LogLocator.tick_values(self, vmin, vmax)
   2314         vmin = self.axis.get_minpos()
   2316     if vmin <= 0.0 or not np.isfinite(vmin):
-> 2317         raise ValueError(
   2318             "Data has no positive values, and therefore can not be "
   2319             "log-scaled.")
   2321 _log.debug('vmin %s vmax %s', vmin, vmax)
   2323 if vmax < vmin:

ValueError: Data has no positive values, and therefore can not be log-scaled.
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

1 participant