Rotating axes label text in 3D matplotlib

前端 未结 1 717
情深已故
情深已故 2020-12-07 23:11

How do I rotate the z-label so the text reads (bottom => top) rather than (top => bottom)?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import A         


        
相关标签:
1条回答
  • 2020-12-07 23:49

    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 enter image description here

    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()
    
    0 讨论(0)
提交回复
热议问题