Adding a y-axis label to secondary y-axis in matplotlib

前端 未结 4 823
情深已故
情深已故 2020-11-27 10:04

I can add a y label to the left y-axis using plt.ylabel, but how can I add it to the secondary y-axis?

table = sql.read_frame(query,connection)
         


        
相关标签:
4条回答
  • 2020-11-27 10:35

    There is a straightforward solution without messing with matplotlib: just pandas.

    Tweaking the original example:

    table = sql.read_frame(query,connection)
    
    ax = table[0].plot(color=colors[0],ylim=(0,100))
    ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)
    
    ax.set_ylabel('Left axes label')
    ax2.set_ylabel('Right axes label')
    

    Basically, when the secondary_y=True option is given (eventhough ax=ax is passed too) pandas.plot returns a different axes which we use to set the labels.

    I know this was answered long ago, but I think this approach worths it.

    0 讨论(0)
  • 2020-11-27 10:36

    The best way is to interact with the axes object directly

    import numpy as np
    import matplotlib.pyplot as plt
    x = np.arange(0, 10, 0.1)
    y1 = 0.05 * x**2
    y2 = -1 *y1
    
    fig, ax1 = plt.subplots()
    
    ax2 = ax1.twinx()
    ax1.plot(x, y1, 'g-')
    ax2.plot(x, y2, 'b-')
    
    ax1.set_xlabel('X data')
    ax1.set_ylabel('Y1 data', color='g')
    ax2.set_ylabel('Y2 data', color='b')
    
    plt.show()
    

    example graph

    0 讨论(0)
  • 2020-11-27 10:40

    For everyone stumbling upon this post because pandas gets mentioned, you now have the very elegant and straighforward option of directly accessing the secondary_y axis in pandas with ax.right_ax

    So paraphrasing the example initially posted, you would write:

    table = sql.read_frame(query,connection)
    
    ax = table[[0, 1]].plot(ylim=(0,100), secondary_y=table[1])
    ax.set_ylabel('$')
    ax.right_ax.set_ylabel('Your second Y-Axis Label goes here!')
    

    (this is already mentioned in these posts as well: 1 2)

    0 讨论(0)
  • 2020-11-27 11:01

    I don't have access to Python right now, but off the top of my head:

    fig = plt.figure()
    
    axes1 = fig.add_subplot(111)
    # set props for left y-axis here
    
    axes2 = axes1.twinx()   # mirror them
    axes2.set_ylabel(...)
    
    0 讨论(0)
提交回复
热议问题