12

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

ali_m
  • 71,714
  • 23
  • 223
  • 298
Bryant
  • 664
  • 2
  • 9
  • 23

1 Answers1

24

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

sodd
  • 12,482
  • 3
  • 54
  • 62