Matplotlib’s Scene#

Classes:

Scene3D(inertial_frame, zero_point[, ax])

Class for plotting sympy mechanics in matplotlib.

class symmeplot.matplotlib.scene.Scene3D(inertial_frame, zero_point, ax=None, **inertial_frame_properties)#

Bases: SceneBase

Class for plotting sympy mechanics in matplotlib.

Parameters:

Examples

import matplotlib.pyplot as plt
import sympy.physics.mechanics as me
from symmeplot.matplotlib import Scene3D

N = me.ReferenceFrame("N")
A = me.ReferenceFrame("A")
A.orient_axis(N, N.z, 1)
N0 = me.Point("N_0")
v = 0.2 * N.x + 0.2 * N.y + 0.7 * N.z
A0 = N0.locatenew("A_0", v)
scene = Scene3D(N, N0, scale=0.5)
scene.add_vector(v, name="v")
scene.add_frame(A, A0, ls="--")
scene.lambdify_system(())
scene.evaluate_system()
scene.plot()
../../_images/scene_0_0.png

Methods:

add_body(body, **kwargs)

Add a sympy body to the scene.

add_frame(frame[, origin])

Add a sympy ReferenceFrame to the scene.

add_line(points[, name])

Add a sympy Vector to the scene.

add_plot_object(plot_object)

Add a plot object to the scene.

add_point(point, **kwargs)

Add a sympy Vector to the scene.

add_vector(vector[, origin])

Add a sympy Vector to the scene.

animate(get_args, frames[, interval])

Animate the scene.

as_orthogonal_projection_plot([frame])

Change the axis to an orthogonal projection making the view seemingly 2D.

auto_zoom([scale])

Auto scale the axis.

clear()

Clear the axes.

evaluate_system(*args)

Evaluate the system using the function created with lambdify_system.

get_expressions_to_evaluate()

Return a tuple of the necessary expressions for plotting.

get_plot_object(sympy_object)

Return the plot_object based on a sympy object.

lambdify_system(args[, modules, printer, ...])

Lambdify the system.

plot([prettify, ax_scale])

Plot all plot objects.

set_visibility(sympy_object, is_visible[, ...])

Hide or show a plot_object based on a sympy_object.

update()

Update the objects on the scene, based on the currect values.

Attributes:

annot_coords

Coordinate where the annotation text is displayed.

annot_location

String describing where the annotation should be displayed.

artists

Artists used to plot the object.

axes

Axes used by the scene.

children

Plot objects.

inertial_frame

The reference frame with respect to which all objects will be oriented.

plot_objects

Plot objects.

values

List of evaluated values for the object's variables.

zero_point

The absolute origin with respect to which all objects will be positioned.

add_body(body, **kwargs)#

Add a sympy body to the scene.

Parameters:
Returns:

The added plot object.

Return type:

PlotBody

add_frame(frame: ReferenceFrame, origin: Point | Vector | None = None, **kwargs)#

Add a sympy ReferenceFrame to the scene.

Parameters:
Returns:

The added plot object.

Return type:

PlotFrame

add_line(points: Iterable[Point | Vector], name: str | None = None, **kwargs)#

Add a sympy Vector to the scene.

Parameters:
Returns:

The added plot object.

Return type:

PlotLine

add_plot_object(plot_object: PlotBase)#

Add a plot object to the scene.

Parameters:

plot_object (PlotBase) – The plot object that should be added.

add_point(point: Point | Vector, **kwargs) type[PlotBase]#

Add a sympy Vector to the scene.

Parameters:
Returns:

The added plot object.

Return type:

PlotPoint

add_vector(vector: Vector, origin: Point | Vector | None = None, **kwargs)#

Add a sympy Vector to the scene.

Parameters:
Returns:

The added plot object.

Return type:

PlotVector

animate(get_args: Callable[[Any], tuple], frames: Iterable[Any] | int, interval: int = 30, **kwargs) FuncAnimation#

Animate the scene.

Parameters:
  • get_args (Callable) – Function that returns the arguments for the evaluate_system method. The function should takes the current frame as input.

  • frames (int or iterable) – Number of frames or iterable with frames.

  • interval (int, optional) – Time interval between frames in milliseconds. Default is 30.

  • **kwargs – Keyword arguments are parsed to the matplotlib.animation.FuncAnimation.

Returns:

Animation object.

Return type:

matplotlib.animation.FuncAnimation

property annot_coords#

Coordinate where the annotation text is displayed.

property annot_location#

String describing where the annotation should be displayed.

Explanation

String that is used to determine where the annotation should be displayed. Options are: - ‘object’: The annotation location is determined based on the plot_object

property artists: tuple[ArtistBase, ...]#

Artists used to plot the object.

as_orthogonal_projection_plot(frame: ReferenceFrame | None = None) None#

Change the axis to an orthogonal projection making the view seemingly 2D.

Parameters:

frame (sympy.physics.vector.frame.ReferenceFrame, optional) – Reference frame w.r.t. which the axis view is oriented aligning the users view with its YZ plane. The default is the inertial frame of the scene.

auto_zoom(scale=1.1)#

Auto scale the axis.

property axes#

Axes used by the scene.

property children: tuple[PlotBase, ...]#

Plot objects.

clear()#

Clear the axes.

Explanation

Remove all artists known by the instance. Only the inertial frame as plotobject in the scene.

evaluate_system(*args) None#

Evaluate the system using the function created with lambdify_system.

get_expressions_to_evaluate() tuple#

Return a tuple of the necessary expressions for plotting.

get_plot_object(sympy_object: Any | str) PlotBase | None#

Return the plot_object based on a sympy object.

Explanation

Return the plot_object based on a provided sympy object. For example ReferenceFrame('N') will give the PlotFrame of that reference frame. If the plot_object has not been added it will return None.

Parameters:

sympy_object (Any or str) – SymPy object to search for. If it is a string it will search for the name.

Returns:

Retrieved plot object.

Return type:

PlotBase or None

property inertial_frame: sympy.physics.vector.frame.ReferenceFrame#

The reference frame with respect to which all objects will be oriented.

lambdify_system(args, modules=None, printer=None, use_imps=True, dummify=False, cse=True) Callable#

Lambdify the system.

Explanation

Lambdify the system for faster evaluation, when combined with symmeplot.core.scene.SceneBase.evaluate_system(). See sympy.utilities.lambdify.lambdify() for more information.

plot(prettify=True, ax_scale=1.5)#

Plot all plot objects.

Parameters:
  • prettify (bool, optional) – If True prettify the axes. Default is True.

  • ax_scale (float, optional) – Makes the axes bigger in the figure. This function is part of prettifying the figure and only works nicely if it is the only subplot. Disabled if set to 0. Default is 1.5

Returns:

Returns the plotted artists

Return type:

tuple of artists

property plot_objects: tuple[PlotBase, ...]#

Plot objects.

set_visibility(sympy_object: Any | str, is_visible: bool, raise_error: bool = True) None#

Hide or show a plot_object based on a sympy_object.

Parameters:
update() None#

Update the objects on the scene, based on the currect values.

property values: tuple#

List of evaluated values for the object’s variables.

property zero_point: sympy.physics.vector.point.Point#

The absolute origin with respect to which all objects will be positioned.