Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plot a curve in 3D with Sympy

How to plot the following 3D curve (as an example) using Sympy? I know just create an array for t and do this in Matplotlib, but I don't really want to plot this curve, rather to learn how to define and plot curves symbolically.

alpha(t) = (cos(t), sin(t), t)

from sympy import *

t = symbols('t')
alpha = [cos(t), sin(t), t]

# now what?

I have tried using the plot method in various ways but this has only resulted in either three separate 1D curves, or an error.

like image 932
Mark Avatar asked Aug 11 '17 04:08

Mark


2 Answers

You have to use methods from sympy.plotting, in your case your need plot3d_parametric_line:

from sympy import *
from sympy.plotting import plot3d_parametric_line

t = symbols('t')
alpha = [cos(t), sin(t), t]
plot3d_parametric_line(*alpha)

or plot3d_parametric_line(cos(t), sin(t), t, (t, 0, 2*pi)) if you like to set limits of t.

enter image description here Look for more examples to plot in 3d with sympy: https://github.com/sympy/sympy/blob/master/examples/beginner/plot_examples.py

like image 146
Serenity Avatar answered Sep 27 '22 22:09

Serenity


I never tried ploting in sympy

I suspect more will have matplotlib experience

lambdify() is the interface between symbolic expressions and regular functions

from sympy import *
from sympy.utilities.lambdify import lambdify
import math

t = symbols('t')
alpha = [cos(t), sin(t), t]

f = lambdify(t, alpha)

T = [2*math.pi/100*n for n in range(100)]
F = [f(x) for x in T]

import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

fig1, ax1 = plt.subplots(subplot_kw=dict(projection='3d'))
ax1.plot(*zip(*F))
ax1.set_aspect('equal')
plt.show()

enter image description here

like image 30
f5r5e5d Avatar answered Sep 27 '22 20:09

f5r5e5d