D1X
D1X

Reputation: 5444

What is the most descriptive way to plot Lorenz System?

I am (numerically) solving the Lorenz System by using different methods. I am plotting it using matplotlib but I would like a way to distinguish better the points.

For example:

Let's assume the points to be plotted are stored in the array a which has the form

array([[  0.5       ,   0.5       ,   0.5       ],
       [  0.50640425,   0.6324552 ,   0.48965064]])
         #...

Now these lines of code

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(a[:,0],a[:,1],a[:,2])
plt.show()

produce:

enter image description here

Not very descriptive, is it? So I thought plotting discrete points would work better. So these ones:

import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(a[:,0],a[:,1],a[:,2], s=0.2)
plt.show()

produce:

enter image description here

But it is not as descriptive as I want. I want to know what is the most descriptive way to plot the Lorenz system.

Upvotes: 0

Views: 350

Answers (1)

Vlas Sokolov
Vlas Sokolov

Reputation: 3893

Consider making your scatter points transparent. You can do this by passing an alpha keyword to plt.scatter. Here's an example, modified from mplot3d example gallery, with alpha = 1.0, which is the default value:

ax.scatter(xs, ys, zs, alpha=1.0, s=0.2)

opaque

And here is the same scatter point cloud drawn with alpha = 0.1:

ax.scatter(xs, ys, zs, alpha=0.1, s=0.2)

transparent

Note that while this appears to be a good visualization, the interactive part of it is quite slow for a large number of points. If you really need fast performance, consider an alternative approach - splitting the lines in segments and coloring them by index, similarly to what's being done here.

Upvotes: 3

Related Questions