3

When making a 3D scatter plot with matplotlib I cannot seem to control whether the axes are above or below the plot. For example the following code will always have the x and y axes above the plot if ax1.elev < 0

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

fig = plt.figure('Test')
X = np.random.rand(1,100)
Y = np.random.rand(1,100)
Z = np.random.rand(1,100)

ax1 = fig.add_subplot(111, projection = '3d')

ax1.scatter(X,Y,Z)
ax1.view_init(-10,45)

Is it possible to force the x and y axes and the gridlines and planes to be below the plot even though ax1.elev < 0?

Paul
  • 33
  • 3

1 Answers1

3

I take as an example the code of this question (thanks crayzeewulf). Except for the z-axis, we do it for the x- and y-axis

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

fig = plt.figure('Test')
X = np.random.rand(1,100)
Y = np.random.rand(1,100)*10
Z = np.random.rand(1,100)

ax1 = fig.add_subplot(111, projection = '3d')

ax1.scatter(X,Y,Z)
ax1.view_init(-10,45)

tmp_planes = ax1.zaxis._PLANES 
ax1.xaxis._PLANES = ( tmp_planes[3], tmp_planes[2], 
                     tmp_planes[1], tmp_planes[0], 
                     tmp_planes[5], tmp_planes[4])

ax1.yaxis._PLANES = ( tmp_planes[3], tmp_planes[2], 
                     tmp_planes[1], tmp_planes[0], 
                     tmp_planes[5], tmp_planes[4])

view_1 = (25, -135)
view_2 = (-10, 45)
init_view = view_2
ax1.view_init(*init_view)

Change_axes_pos

Community
  • 1
  • 1
Lucas
  • 6,869
  • 5
  • 29
  • 44