44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
|
Various helper functions for plotting.
|
|
"""
|
|
import numpy as np
|
|
|
|
from replot import adaptive_sampling
|
|
from replot import exceptions as exc
|
|
|
|
|
|
def plot_function(data, *args, **kwargs):
|
|
"""
|
|
Helper function to handle plotting of unevaluated functions (trying \
|
|
to evaluate it nicely and rendering the plot).
|
|
|
|
:param data: The function to plot.
|
|
:returns: A tuple of ``(args, kwargs)`` representing the plot.
|
|
|
|
.. seealso:: The documentation of the ``replot.Figure.plot`` method.
|
|
|
|
.. note:: ``args`` is used to handle the interval or point series on \
|
|
which the function should be evaluated. ``kwargs`` are passed \
|
|
directly to ``matplotlib.pyplot.plot`.
|
|
"""
|
|
if len(args) == 0:
|
|
# If no interval specified, raise an issue
|
|
raise exc.InvalidParameterError(
|
|
"You should pass a plotting interval to the plot command.")
|
|
elif isinstance(args[0], tuple):
|
|
# Interval specified, use it and adaptive plotting
|
|
x_values, y_values = adaptive_sampling.sample_function(
|
|
data,
|
|
args[0],
|
|
tol=1e-3)
|
|
elif isinstance(args[0], (list, np.ndarray)):
|
|
# List of points specified, use them and compute values of the
|
|
# function
|
|
x_values = args[0]
|
|
y_values = [data(i) for i in x_values]
|
|
else:
|
|
raise exc.InvalidParameterError(
|
|
"Second parameter in plot command should be a tuple " +
|
|
"specifying plotting interval.")
|
|
return ((x_values, y_values) + args[1:], kwargs)
|