This module implements a new plotting framework for SymPy. The central class of the module is the Plot class that connects the data representations (subclasses of BaseSeries) with different plotting backends. It's not imported by default for backward compatibility with the old module.
Then there are the plot_*() functions for plotting different kinds of plots and is better suited for interactive work.
plot: Plots line plots in 2D.
plot_parametric: Plots parametric line plots in 2D.
plot_implicit : Plots implicit equations and region plots in 2D
plot3d : Plots functions of two variables in 3D
plot3d_parametric_line: Plots line parametric plots in 3D
plot3d_parametric_surface : Plots surface parametric plots of functions with two variables in 3D.
In [8]:
from sympy.plotting import plot, plot_parametric, plot3d, plot3d_parametric_line, plot3d_parametric_surface
In [9]:
p = plot(x)
In [10]:
p # the Plot object
In [11]:
p[0] # one of the data series objects
In [12]:
p[0].label # an option of the data series
In [13]:
p.legend # a global option of the plot
In [14]:
p.legend = True
p.show()
You can plot 2D different functions in the same plot.
In [15]:
p1 = plot_parametric(x*sin(x),x*cos(x), show=False)
p1.extend(p) # Plot objects are just like lists.
p1.show()
In [16]:
p1.legend = True
p1.show()
In [17]:
p1[0].line_color='r'
p1[1].line_color='b' # a constant color
p1.show()
In [18]:
p1[0].line_color = lambda a : a # color dependent on the parameter
p1.show()
In [19]:
p1.title = 'Big title'
p1.xlabel = 'the x axis'
p1[1].label = 'straight line'
p1.show()
In [20]:
p1.aspect_ratio
In [21]:
p1.aspect_ratio = (1,1)
p1.xlim = (-15,20)
p1.show()
Hm, xlim does not work in the notebook. Hopefully it works in IPython.
In [17]:
p1._backend.ax.get_xlim()
Yeah, the backend got the command, but the inline backend does not honour it.
In [23]:
p = plot(x)
p
In [24]:
p.extend(plot(x+1, show=False))
p.show()
p
In [25]:
p.append(plot(x+3, x**2, show=False)[1])
p.show()
p
In [26]:
help(plot)
In [28]:
plot(sin(x**2)) # plots with adaptive sampling and default range of (-10, 10)
You can also specify the depth of the recursion. It is also possible to disable adaptive sampling and use uniform sampling with nb_of_points.
In [30]:
plot(sin(x**2), depth=7) #specifying the depth of recursion.
In [31]:
plot(sin(x**2), adaptive=False, nb_of_points=500)
In [32]:
help(plot_parametric)
In [33]:
plot_parametric(cos(x), sin(x))
Multiple plots.
In [34]:
plot_parametric((cos(x), sin(x)), (x, cos(x)))
We can combine parametric and line plots into a single plot.
In [35]:
p = plot(sin(x), show=False)
p.extend(plot_parametric(cos(x), sin(x), show=False))
p.show()
In [36]:
help(plot3d)
In [37]:
plot3d(x*y)
In [38]:
plot3d(x*y, nb_of_points_x=100, nb_of_points_y=50)
In [39]:
help(plot3d_parametric_line)
In [40]:
plot3d_parametric_line(cos(x), sin(x), x)
In [41]:
help(plot3d_parametric_surface)
In [42]:
plot3d_parametric_surface(cos(x + y), sin(x - y), x - y)
In [43]:
plot(sqrt(x), (x, -5, 5))
In [44]:
pt = plot(sin(x),show=False)
In [45]:
pt.backend = plot_backends['text']
In [46]:
pt.show()