Create an interactive application containing widgets and charts in order
to study symbolic expressions.
Note: this function is already integrated with many of the usual
plotting functions: since their documentation is more specific, it is
highly recommended to use those instead.
However, the following documentation explains in details the main features
exposed by the interactive module, which might not be included on the
documentation of those other functions.
Parameters:
argstuples
Each tuple represents an expression. Depending on the type of
expression, the tuple should have the following forms:
The label is always optional, whereas the ranges must always be
specified. The ranges will create the discretized domain.
paramsdict
A dictionary mapping the symbols to a parameter. The parameter can be:
an instance of param.parameterized.Parameter.
a tuple of the form:
(default, min, max, N, tick_format, label, spacing)
where:
default, min, maxfloat
Default value, minimum value and maximum value of the slider,
respectively. Must be finite numbers.
Nint, optional
Number of steps of the slider.
tick_formatTickFormatter or None, optional
Provide a formatter for the tick value of the slider. If None,
panel will automatically apply a default formatter.
Alternatively, an instance of
bokeh.models.formatters.TickFormatter can be used.
Default to None.
label: str, optional
Custom text associated to the slider.
spacingstr, optional
Specify the discretization spacing. Default to “linear”, can
be changed to “log”.
Note that the parameters cannot be linked together (ie, one parameter
cannot depend on another one).
aspect(float, float) or str, optional
Set the aspect ratio of the plot. The value depends on the backend
being used. Read that backend’s documentation to find out the
possible values.
backendPlot, optional
The backend to be used to generate the plot. It must be a subclass of
spb.backends.base_backend.Plot. If not provided, the module will
use the default backend.
color_funccallable, optional
A numerical function which defines the 2D line color or the surface
color:
For 2D plots, a function of two variables is needed: x, y (the
points computed by the internal algorithm).
For 3D surfaces, a function of three variables is needed: x, y, z
(the points computed by the internal algorithm).
For 3D parametric surfaces, a function of five variables is needed:
x, y, z, u, v (the points computed by the internal algorithm and the
parameters).
For surface plots, the coloring is applied only if use_cm=True.
labellist/tuple, optional
The labels to be shown in the legend. If not provided, the string
representation of expr will be used. The number of labels must be
equal to the number of series generated by the plotting function.
layoutstr, optional
The layout for the controls/plot. Possible values:
‘tb’: controls in the top bar.
‘bb’: controls in the bottom bar.
‘sbl’: controls in the left side bar.
‘sbr’: controls in the right side bar.
Default layout to ‘tb’. Note that side bar layouts may not
work well with some backends.
ncolsint, optional
Number of columns to lay out the widgets. Default to 2.
is_complexboolean, optional
Default to False. If True, it directs the internal algorithm to
create all the necessary series to create a complex plot (for example,
one for the real part, one for the imaginary part).
is_vectorboolean, optional
Default to False. If True, it directs the internal algorithm to
create all the necessary series to create a vector plot (for example,
plotting the magnitude of the vector field as a contour plot).
namestr, optional
The name to be shown on top of the interactive application, when
served on a new browser window. Refer to servable to learn more.
Default to an empty string.
pane_kwdict, optional
A dictionary of keyword/values which is passed to the pane containing
the chart in order to further customize the output (read the Notes
section to understand how the interactive plot is built).
The following web pages shows the available options:
Refer to [2] for MatplotlibBackend. Two interesting options
are:
interactive: wheter to activate the ipympl interactive backend.
dpi: set the dots per inch of the output png. Default to 96.
A dictionary of keywords/values which is passed to the backend’s
function to customize the appearance of lines, surfaces, etc.
Refer to the plotting library (backend) manual for more informations.
If a list of dictionaries is provided, the number of dictionaries must
be equal to the number of series generated by the plotting function.
servablebool, optional
Default to False, which will show the interactive application on the
output cell of a Jupyter Notebook. If True, the application will be
served on a new browser window.
showbool, optional
Default to True.
If True, it will return an object that will be rendered on the
output cell of a Jupyter Notebook. If False, it returns an instance
of InteractivePlot, which can later be be shown by calling the
show() method.
use_latexbool, optional
Default to True.
If True, the latex representation of the symbols will be used in the
labels of the parameter-controls. If False, the string
representation will be used instead.
detect_polesboolean
Chose whether to detect and correctly plot poles in line plots.
Defaulto to False. To improve detection, increase the number of
discretization points n and/or change the value of eps.
epsfloat
An arbitrary small value used by the detect_poles algorithm.
Default value to 0.1. Before changing this value, it is recommended to
increase the number of discretization points.
n1, n2, n3int, optional
Set the number of discretization points in the three directions,
respectively.
nint, optional
Set the number of discretization points on all directions.
It overrides n1, n2, n3.
ncint, optional
Number of discretization points for the contour plot when
is_vector=True.
throttledboolean, optional
Default to False. If True the recompute will be done at mouse-up event
on sliders. If False, every slider tick will force a recompute.
This function is specifically designed to work within Jupyter Notebook.
It is also possible to use it from a regular Python console,
by executing: iplot(...,servable=True), which will create a server
process loading the interactive plot on the browser.
However, K3DBackend is not supported in this mode of operation.
The interactive application generated by iplot consists of two main
containers:
a pane containing the widgets.
a pane containing the chart. We can further customize this container
by setting the pane_kw dictionary. Please, read its documentation
to understand the available options.
Some examples use an instance of PrintfTickFormatter to format the
value shown by a slider. This class is exposed by Bokeh, but can be
used by iplot with any backend. Refer to [1] for more
information about tick formatting.
It has been observed that Dark Reader (or other night-mode-enabling
browser extensions) might interfere with the correct behaviour of
the output of iplot. Please, consider adding localhost to the
exclusion list of such browser extensions.
Say we are creating two different interactive plots and capturing
their output on two variables, using show=False. For example,
p1=iplot(...,show=False) and p2=iplot(...,show=False).
Then, running p1.show() on the screen will result in an error.
This is standard behaviour that can’t be changed, as panel’s
parameters are class attributes that gets deleted each time a new
instance is created.
MatplotlibBackend can be used, but the resulting figure is just a
PNG image without any interactive frame. Thus, data exploration is not
great. Therefore, the use of PlotlyBackend or BokehBackend is
encouraged.
Once this module has been loaded, there could be problems with all
other plotting functions when using BokehBackend, namely the
figure won’t show up in the output cell. If that is the case, we might
try to turn off automatic updates on panning by setting
update_event=False in the function call.
When BokehBackend is used:
the user-defined theme won’t be applied.
rendering of gradient lines is slow.
color bars might not update their ranges.
Once this module has been loaded and iplot has been executed, the
safest procedure to restart Jupyter Notebook’s kernel is the following:
save the current notebook.
close the notebook and Jupyter server.
restart Jupyter server and open the notebook.
reload the cells.
Failing to follow this procedure might results in the notebook to
become unresponsive once the module has been reloaded, with several
errors appearing on the output cell.
References
Examples
NOTE: the following examples use the ordinary plotting function because
iplot is already integrated with them.
Surface plot between -10 <= x, y <= 10 with a damping parameter varying
from 0 to 1, with a default value of 0.15, discretized with 50 points
on both directions. Note the use of threed=True to specify a 3D plot.
If threed=False, a contour plot will be generated.
fromsympyimport(symbols,sqrt,cos,exp,sin,pi,re,im,Matrix,Plane,Polygon,I,log)fromspbimport*x,y,z=symbols("x, y, z")r=sqrt(x**2+y**2)d=symbols('d')expr=10*cos(r)*exp(-r*d)plot3d((expr,(x,-10,10),(y,-10,10)),params={d:(0.15,0,1)},title="My Title",xlabel="x axis",ylabel="y axis",zlabel="z axis",backend=PB,n=51,use_cm=True,use_latex=False,wireframe=True,wf_n1=15,wf_n2=15,wf_rendering_kw={"line_color":"#003428","line_width":0.75})
A line plot illustrating the Fouries series approximation of a saw tooth
wave and:
custom format of the value shown on the slider.
creation of an integer spinner widget. This is achieved by setting
None as one of the bounds of the integer parameter.
fromsympyimport*fromspbimport*importparamfrombokeh.models.formattersimportPrintfTickFormatterx,T,n,m=symbols("x, T, n, m")sawtooth=frac(x/T)# Fourier Series of a sawtooth wavefs=S(1)/2-(1/pi)*Sum(sin(2*n*pi*x/T)/n,(n,1,m))formatter=PrintfTickFormatter(format="%.3f")plot((sawtooth,(x,0,10),"f",{"line_dash":"dotted"}),(fs,(x,0,10),"approx"),params={T:(4,0,10,80,formatter),m:param.Integer(4,bounds=(1,None),label="Sum up to n ")},xlabel="x",ylabel="y",backend=BB,use_latex=False)
Combine together InteractivePlot and Plot instances. The same
parameters dictionary must be used for every interactive plot command.
Note:
the first plot dictates the labels, title and wheter to show the legend
or not.
Instances of Plot class must be place on the right side of the +
sign.
show=False has been set in order for iplot to return an instance
of InteractivePlot, which supports addition.
Once we are done playing with parameters, we can access the backend
with p.backend. Then, we can use the p.backend.fig attribute
to retrieve the figure, or p.backend.save() to save the figure.
Serves the interactive plot to a separate browser window. Note that
K3DBackend is not supported for this operation mode. Also note the
two ways to create a integer sliders.
fromsympyimport*fromspbimport*importparamfrombokeh.models.formattersimportPrintfTickFormatterformatter=PrintfTickFormatter(format='%.4f')p1,p2,t,r,c=symbols("p1, p2, t, r, c")phi=-(r*t+p1*sin(c*r*t)+p2*sin(2*c*r*t))phip=phi.diff(t)r1=phip/(1+phip)plot_polar((r1,(t,0,2*pi)),params={p1:(0.035,-0.035,0.035,50,formatter),p2:(0.005,-0.02,0.02,50,formatter),# integer parameter created with paramr:param.Integer(2,softbounds=(2,5),label="r"),# integer parameter created with usual syntaxc:(3,1,5,4)},use_latex=False,backend=BB,aspect="equal",n=5000,layout="sbl",ncols=1,servable=True,name="Non Circular Planetary Drive - Ring Profile")
The correct series type is instantiated only if all ranges are specified.
So, to create an interactive line series, one range must be specified.
To create an interactive surface series, two ranges must be provided, and
so on.
Parameters:
argslist/tuple
A list or tuple of the form [(expr1,range1),...], where:
exprExpr
Expression (or expressions) representing the function to evaluate.
range: (symbol, min, max)
A 3-tuple (or multiple 3-tuple) denoting the range of the
variable. For the function to work properly, all ranges must be
provided.
paramsdict
A dictionary mapping symbols to numerical values. If not specified,
iplot should be provided instead.
iplotInteractivePlot, optional
An existing instance of InteractivePlot from which the parameters
will be extracted. If both params and iplot are provided, then
iplot has the precedence.
is_complexboolean, optional
Default to False. If True, it directs the internal algorithm to
create all the necessary series to create a complex plot (for example,
one for the real part, one for the imaginary part, …).
is_polarboolean, optional
Default to False. If True:
for a 2D line plot requests the backend to use a polar chart.
for a 3D surface (or contour) requests a polar discretization.
In this case, the first range represents the radius, the second one
represents the angle.
is_vectorboolean, optional
Default to False. If True, it directs the internal algorithm to
create all the necessary series to create a vector plot (for example,
plotting the magnitude of the vector field as a contour plot, …).
n1, n2, n3int, optional
Number of discretization points in the 3 directions.
nint, optional
Set the same number of discretization points on all directions.
The keyword arguments to be provided depends on the interested data series
to be created. For example, if we are trying to plot a line, then the
same keyword argument associated to the plot() function can be used.
Similarly, if we are trying to create vector-related interactive series,
the same keyword arguments associated to plot_vector() can be used.
And so on.
However, interactive data series do not support adaptive algorithms.
Hence, adaptive-related keyword arguments will not be used.
A dictionary mapping the symbols to a parameter. The parameter can be:
an instance of param.parameterized.Parameter. Refer to [4]
for a list of available parameters.
a tuple of the form:
(default, min, max, N, tick_format, label, spacing)
where:
default, min, maxfloat
Default value, minimum value and maximum value of the slider,
respectively. Must be finite numbers.
Nint, optional
Number of steps of the slider.
tick_formatTickFormatter or None, optional
Provide a formatter for the tick value of the slider. If None,
panel will automatically apply a default formatter.
Alternatively, an instance of
bokeh.models.formatters.TickFormatter can be used.
Default to None.
label: str, optional
Custom text associated to the slider.
spacingstr, optional
Specify the discretization spacing. Default to “linear”,
can be changed to “log”.
Note that the parameters cannot be linked together (ie, one parameter
cannot depend on another one).
use_latexbool, optional
Default to True.
If True, the latex representation of the symbols will be used in the
labels of the parameter-controls. If False, the string representation
will be used instead.
Returns:
widgetsdict
A dictionary mapping the symbols from params to the appropriate
widget.