Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reverse Z Axis on matplotlib 3D Plot

How would one reverse the order on the z axis of a 3D plot (i.e. negative is up, and positive is down)? The following code produces a cone with the base pointing downward; is there a command (like ax.reverse_zlim3d(True) or something?) that can be used to change the tick order?

The following code plots a cone with the base pointing downward. I would like to reverse the z-axis order so that it plots with the base pointing up, like an ice cream cone, with -1 at the top of the graph instead of the bottom.

from matplotlib import pyplot as p
from mpl_toolkits.mplot3d import Axes3D    # @UnusedImport

import numpy as np
from math import pi, cos, sin

z = np.arange(0, 1, 0.02)
theta = np.arange(0, 2 * pi + pi / 50, pi / 50)

fig = p.figure()
axes1 = fig.add_subplot(111, projection='3d')
for zval in z:
    x = zval * np.array([cos(q) for q in theta])
    y = zval * np.array([sin(q) for q in theta])
    axes1.plot(x, y, -zval, 'b-')
axes1.set_xlabel("x label")
axes1.set_ylabel("y label")
axes1.set_zlabel("z label")

p.show()

Cone Plot

like image 736
Bryant Avatar asked Aug 19 '13 16:08

Bryant


People also ask

How do you reverse the axis of a 3D plot in Python?

By using ylim() method ylim() method is also used to invert axes of a plot in Matplotlib. Generally, this method is used to set limits for the axes.

How do I reverse axis in Matplotlib?

In Matplotlib we can reverse axes of a graph using multiple methods. Most common method is by using invert_xaxis() and invert_yaxis() for the axes objects. Other than that we can also use xlim() and ylim(), and axis() methods for the pyplot object.

Can I rotate 3D plot Matplotlib?

The mplot3d toolkit adds simple 3D plotting capabilities to matplotlib by supplying an axes object that can create a 2D projection of a 3D scene. The resulting graph will have the same look and feel as regular 2D plots. The interactive backends also provide the ability to rotate and zoom the 3D scene.


1 Answers

Use the invert_zaxis method of the Axes3D:

from matplotlib import pyplot as p
from mpl_toolkits.mplot3d import Axes3D    # @UnusedImport

import numpy as np
from math import pi, cos, sin

z = np.arange(0, 1, 0.02)
theta = np.arange(0, 2 * pi + pi / 50, pi / 50)

fig = p.figure()
axes1 = fig.add_subplot(111, projection='3d')
for zval in z:
    x = zval * np.array([cos(q) for q in theta])
    y = zval * np.array([sin(q) for q in theta])
    axes1.plot(x, y, -zval, 'b-')
axes1.set_xlabel("x label")
axes1.set_ylabel("y label")
axes1.set_zlabel("z label")

axes1.invert_zaxis()

p.show()

enter image description here

like image 110
sodd Avatar answered Sep 20 '22 06:09

sodd