Fix some bugs
* Fix a bug ``NoneType`` is not iterable due to custom kwargs. * No longer attempt to plot the figure when exiting due to an exception. Started to implement the grid layout.
This commit is contained in:
parent
809044c698
commit
2067e2008f
1715
Examples.ipynb
1715
Examples.ipynb
File diff suppressed because one or more lines are too long
@ -58,6 +58,9 @@ design in the API, or required feature!
|
|||||||
<dt>Use `LaTeX` rendering in `matplotlib`, if available.</dt>
|
<dt>Use `LaTeX` rendering in `matplotlib`, if available.</dt>
|
||||||
<dd>If `replot` finds `LaTeX` installed on your machine, it will overload
|
<dd>If `replot` finds `LaTeX` installed on your machine, it will overload
|
||||||
`matplotlib` settings to use `LaTeX` rendering.</dd>
|
`matplotlib` settings to use `LaTeX` rendering.</dd>
|
||||||
|
|
||||||
|
<dt>Handle subplots more easily</dt>
|
||||||
|
<dd>**TODO**</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,7 +57,9 @@ class Figure():
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def __exit__(self, exception_type, exception_value, traceback):
|
def __exit__(self, exception_type, exception_value, traceback):
|
||||||
self.show()
|
if exception_type is None:
|
||||||
|
# Do not draw the figure if an exception was raised
|
||||||
|
self.show()
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
"""
|
"""
|
||||||
@ -91,6 +93,32 @@ class Figure():
|
|||||||
# interfere with it.
|
# interfere with it.
|
||||||
sns.reset_orig()
|
sns.reset_orig()
|
||||||
|
|
||||||
|
def apply_grid(self, grid_description):
|
||||||
|
"""
|
||||||
|
Apply a grid layout on the figure (subplots). Subplots are based on \
|
||||||
|
defined groups (see ``group`` keyword to \
|
||||||
|
``replot.Figure.plot``).
|
||||||
|
|
||||||
|
:param grid_description: A list of rows. Each row is a string \
|
||||||
|
containing the groups to display (can be seen as ASCII art).
|
||||||
|
|
||||||
|
.. note:: Groups are a single unicode character. If a group does not \
|
||||||
|
contain any plot, the resulting subplot will simply be empty.
|
||||||
|
|
||||||
|
>>> with replot.Figure() as fig: fig.apply_grid(["AAA",
|
||||||
|
"BBC"
|
||||||
|
"DEC"])
|
||||||
|
"""
|
||||||
|
# Check that grid is not empty
|
||||||
|
if len(grid_description) == 0:
|
||||||
|
raise exc.InvalidParameterError("Grid cannot be an empty list.")
|
||||||
|
# Check that all rows have the same number of elements
|
||||||
|
for row in grid_description:
|
||||||
|
if len(row) != len(grid_description[0]):
|
||||||
|
raise exc.InvalidParameterError(
|
||||||
|
"All rows must have the same number of elements.")
|
||||||
|
# TODO: Parse grid
|
||||||
|
|
||||||
def plot(self, *args, **kwargs):
|
def plot(self, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Plot something on the :class:`Figure` object.
|
Plot something on the :class:`Figure` object.
|
||||||
@ -111,8 +139,10 @@ class Figure():
|
|||||||
|
|
||||||
.. note:: You can use some :mod:`replot` specific keyword arguments:
|
.. note:: You can use some :mod:`replot` specific keyword arguments:
|
||||||
|
|
||||||
- ``group`` which defines permits to group plots together, in \
|
- ``group`` which permits to group plots together, in \
|
||||||
subplots (one unicode character maximum).
|
subplots (one unicode character maximum). ``group`` \
|
||||||
|
keyword will not affect the render unless you state \
|
||||||
|
:mod:`replot` to use subplots.
|
||||||
|
|
||||||
>>> with replot.figure() as fig: fig.plot(np.sin, (-1, 1))
|
>>> with replot.figure() as fig: fig.plot(np.sin, (-1, 1))
|
||||||
>>> with replot.figure() as fig: fig.plot(np.sin, [-1, -0.9, …, 1])
|
>>> with replot.figure() as fig: fig.plot(np.sin, [-1, -0.9, …, 1])
|
||||||
@ -126,9 +156,12 @@ class Figure():
|
|||||||
raise exc.InvalidParameterError(
|
raise exc.InvalidParameterError(
|
||||||
"You should pass at least one argument to this function.")
|
"You should pass at least one argument to this function.")
|
||||||
|
|
||||||
# Extra custom kwargs (the ones from replot but not matplotlib) from
|
# Extract custom kwargs (the ones from replot but not matplotlib) from
|
||||||
# kwargs
|
# kwargs
|
||||||
kwargs, custom_kwargs = _handle_custom_plot_arguments(kwargs)
|
if kwargs is not None:
|
||||||
|
kwargs, custom_kwargs = _handle_custom_plot_arguments(kwargs)
|
||||||
|
else:
|
||||||
|
custom_kwargs = {}
|
||||||
|
|
||||||
if hasattr(args[0], "__call__"):
|
if hasattr(args[0], "__call__"):
|
||||||
# We want to plot a function
|
# We want to plot a function
|
||||||
@ -255,7 +288,7 @@ def _handle_custom_plot_arguments(kwargs):
|
|||||||
"Group name cannot be longer than one unicode character.")
|
"Group name cannot be longer than one unicode character.")
|
||||||
custom_kwargs["group"] = kwargs["group"]
|
custom_kwargs["group"] = kwargs["group"]
|
||||||
del kwargs["group"]
|
del kwargs["group"]
|
||||||
return (kwargs, custom_kwargs)
|
return (kwargs, custom_kwargs)
|
||||||
|
|
||||||
|
|
||||||
def _plot_function(data, *args, **kwargs):
|
def _plot_function(data, *args, **kwargs):
|
||||||
|
Loading…
Reference in New Issue
Block a user