As a workaround, you could set the direction of the z-label manually by:
ax.zaxis.set_rotate_label(False) # disable automatic rotation ax.set_zlabel('label text', rotation=90)
Please note that the direction of your z-label also depends on your viewpoint, e.g:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fg = plt.figure(1); fg.clf() axx = [fg.add_subplot(4,1,1+i, projection='3d') for i in range(4)] for ax,azel in zip(axx, [(115,10), (115,-10), (-115,10), (-115,-10)]): ax.set_title(u"Azim, elev = {}°, {}°".format(*azel)) ax.set_zlabel('label text') ax.azim, ax.elev = azel fg.canvas.draw() plt.show()
gives 
Update: It is also possible, to adjust the z-label direction of a plot, which is already drawn (but not beforehand). This is the adjusted version to modify the labels:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fg = plt.figure(1); fg.clf() axx = [fg.add_subplot(4,1,1+i, projection='3d') for i in range(4)] for ax,azel in zip(axx, [(115,10), (115,-10), (-115,10), (-115,-10)]): ax.set_title(u"Azim, elev = {}°, {}°".format(*azel)) ax.set_zlabel('label text') ax.azim, ax.elev = azel fg.canvas.draw() # the angles of the text are calculated here # Read drawn z-label rotations and switch them if needed for ax in axx: ax.zaxis.set_rotate_label(False) a = ax.zaxis.label.get_rotation() if a<180: a += 180 ax.zaxis.label.set_rotation(a) a = ax.zaxis.label.get_rotation() # put the actual angle in the z-label ax.set_zlabel(u'z-rot = {:.1f}°'.format(a)) fg.canvas.draw() plt.show()