Matplotlib: Aligning y-ticks to the left

前端 未结 1 1354
灰色年华
灰色年华 2020-12-10 05:09

I have tick labels of variable length, and I want to align them to the left (i.e. to have a space between the shorter ones and the y axis). Is there any reasonable way to do

相关标签:
1条回答
  • 2020-12-10 05:21

    You will just need to add a pad. See matplotlib ticks position relative to axis

    yax = ax.get_yaxis()
    yax.set_tick_params(pad=pad)
    

    (doc)

    To do your figuring of what the pad should be:

    import numpy as np
    import matplotlib.pyplot as plt
    
    ticks = ["Lorem ipsum dolor sit amet, consectetur adipisicin", "g elit, sed do",      "eiusmod tempor incididunt ut labo", "re et dolore magna ali", "qua. Ut en", "im ad minim veniam, quis nostr", "ud exercitation ullamco labo", "ris nisi ut aliquip ex ea c", "ommodo co", "nsequat. Duis aute irure dolor in rep"]
    data = [5,1,2,4,1,4,5,2,1,5]
    ind = np.arange(len(data))
    fig = plt.figure(tight_layout=True) # need tight_layout to make everything fit
    ax = plt.subplot(111)
    ax.barh(ind, data, 0.999)
    ax.set_yticks(ind + 0.5)
    r = ax.set_yticklabels(ticks, ha = 'left')
    fig.set_size_inches(12, 8, forward=True) 
    # re-size first, the shift needs to be in display units
    plt.draw()  # this is needed because get_window_extent needs a renderer to work
    yax = ax.get_yaxis()
    # find the maximum width of the label on the major ticks
    pad = max(T.label.get_window_extent().width for T in yax.majorTicks)
    
    yax.set_tick_params(pad=pad)
    plt.draw()
    

    demo of code

    0 讨论(0)
提交回复
热议问题