How can I make a simple 3D line with Matplotlib?

Question:

I want to generate the lines, which I get from an array in 3D.

Here is the code:

VecStart_x = [0,1,3,5]
VecStart_y = [2,2,5,5]
VecStart_z = [0,1,1,5]
VecEnd_x = [1,2,-1,6]
VecEnd_y = [3,1,-2,7]
VecEnd_z  =[1,0,4,9]

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.plot([VecStart_x ,VecEnd_x],[VecStart_y,VecEnd_y],[VecStart_z,VecEnd_z])
plt.show()
Axes3D.plot()

I get that error:

ValueError: third arg must be a format string

Asked By: Daniel Zemljic

||

Answers:

The gallery is a great starting point to find out examples:

http://matplotlib.org/gallery.html

There is an example of 3d line plot here:

http://matplotlib.org/examples/mplot3d/lines3d_demo.html

You see that you need to pass to the ax.plot function 3 vectors.
You are actually passing list of lists.
I don’t know what you mean by the Start and End sublist, but the following line should work :

ax.plot(VecStart_x + VecEnd_x, VecStart_y + VecEnd_y, VecStart_z +VecEnd_z)

Here I sum the sublist (concatenation) in order to have only one list by axis.

Answered By: Nicolas Barbey

I guess, you want to plot 4 lines. Then you can try

for i in range(4):
    ax.plot([VecStart_x[i], VecEnd_x[i]], [VecStart_y[i],VecEnd_y[i]],zs=[VecStart_z[i],VecEnd_z[i]])

As Nicolas has suggested, do have a look at the matplotlib gallery.

Answered By: imsc
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.