139 lines
3.6 KiB
Python
139 lines
3.6 KiB
Python
"""Plotting module that can plot 2D and 3D functions
|
|
"""
|
|
|
|
from sympy.utilities.decorator import doctest_depends_on
|
|
|
|
@doctest_depends_on(modules=('pyglet',))
|
|
def PygletPlot(*args, **kwargs):
|
|
"""
|
|
|
|
Plot Examples
|
|
=============
|
|
|
|
See examples/advanced/pyglet_plotting.py for many more examples.
|
|
|
|
>>> from sympy.plotting.pygletplot import PygletPlot as Plot
|
|
>>> from sympy.abc import x, y, z
|
|
|
|
>>> Plot(x*y**3-y*x**3)
|
|
[0]: -x**3*y + x*y**3, 'mode=cartesian'
|
|
|
|
>>> p = Plot()
|
|
>>> p[1] = x*y
|
|
>>> p[1].color = z, (0.4,0.4,0.9), (0.9,0.4,0.4)
|
|
|
|
>>> p = Plot()
|
|
>>> p[1] = x**2+y**2
|
|
>>> p[2] = -x**2-y**2
|
|
|
|
|
|
Variable Intervals
|
|
==================
|
|
|
|
The basic format is [var, min, max, steps], but the
|
|
syntax is flexible and arguments left out are taken
|
|
from the defaults for the current coordinate mode:
|
|
|
|
>>> Plot(x**2) # implies [x,-5,5,100]
|
|
[0]: x**2, 'mode=cartesian'
|
|
|
|
>>> Plot(x**2, [], []) # [x,-1,1,40], [y,-1,1,40]
|
|
[0]: x**2, 'mode=cartesian'
|
|
>>> Plot(x**2-y**2, [100], [100]) # [x,-1,1,100], [y,-1,1,100]
|
|
[0]: x**2 - y**2, 'mode=cartesian'
|
|
>>> Plot(x**2, [x,-13,13,100])
|
|
[0]: x**2, 'mode=cartesian'
|
|
>>> Plot(x**2, [-13,13]) # [x,-13,13,100]
|
|
[0]: x**2, 'mode=cartesian'
|
|
>>> Plot(x**2, [x,-13,13]) # [x,-13,13,100]
|
|
[0]: x**2, 'mode=cartesian'
|
|
>>> Plot(1*x, [], [x], mode='cylindrical')
|
|
... # [unbound_theta,0,2*Pi,40], [x,-1,1,20]
|
|
[0]: x, 'mode=cartesian'
|
|
|
|
|
|
Coordinate Modes
|
|
================
|
|
|
|
Plot supports several curvilinear coordinate modes, and
|
|
they independent for each plotted function. You can specify
|
|
a coordinate mode explicitly with the 'mode' named argument,
|
|
but it can be automatically determined for Cartesian or
|
|
parametric plots, and therefore must only be specified for
|
|
polar, cylindrical, and spherical modes.
|
|
|
|
Specifically, Plot(function arguments) and Plot[n] =
|
|
(function arguments) will interpret your arguments as a
|
|
Cartesian plot if you provide one function and a parametric
|
|
plot if you provide two or three functions. Similarly, the
|
|
arguments will be interpreted as a curve if one variable is
|
|
used, and a surface if two are used.
|
|
|
|
Supported mode names by number of variables:
|
|
|
|
1: parametric, cartesian, polar
|
|
2: parametric, cartesian, cylindrical = polar, spherical
|
|
|
|
>>> Plot(1, mode='spherical')
|
|
|
|
|
|
Calculator-like Interface
|
|
=========================
|
|
|
|
>>> p = Plot(visible=False)
|
|
>>> f = x**2
|
|
>>> p[1] = f
|
|
>>> p[2] = f.diff(x)
|
|
>>> p[3] = f.diff(x).diff(x)
|
|
>>> p
|
|
[1]: x**2, 'mode=cartesian'
|
|
[2]: 2*x, 'mode=cartesian'
|
|
[3]: 2, 'mode=cartesian'
|
|
>>> p.show()
|
|
>>> p.clear()
|
|
>>> p
|
|
<blank plot>
|
|
>>> p[1] = x**2+y**2
|
|
>>> p[1].style = 'solid'
|
|
>>> p[2] = -x**2-y**2
|
|
>>> p[2].style = 'wireframe'
|
|
>>> p[1].color = z, (0.4,0.4,0.9), (0.9,0.4,0.4)
|
|
>>> p[1].style = 'both'
|
|
>>> p[2].style = 'both'
|
|
>>> p.close()
|
|
|
|
|
|
Plot Window Keyboard Controls
|
|
=============================
|
|
|
|
Screen Rotation:
|
|
X,Y axis Arrow Keys, A,S,D,W, Numpad 4,6,8,2
|
|
Z axis Q,E, Numpad 7,9
|
|
|
|
Model Rotation:
|
|
Z axis Z,C, Numpad 1,3
|
|
|
|
Zoom: R,F, PgUp,PgDn, Numpad +,-
|
|
|
|
Reset Camera: X, Numpad 5
|
|
|
|
Camera Presets:
|
|
XY F1
|
|
XZ F2
|
|
YZ F3
|
|
Perspective F4
|
|
|
|
Sensitivity Modifier: SHIFT
|
|
|
|
Axes Toggle:
|
|
Visible F5
|
|
Colors F6
|
|
|
|
Close Window: ESCAPE
|
|
|
|
=============================
|
|
"""
|
|
|
|
from sympy.plotting.pygletplot.plot import PygletPlot
|
|
return PygletPlot(*args, **kwargs)
|