How to share secondary y-axis between subplots in matplotlib
Question: If you have multiple subplots containing a secondary y-axis (created using
_twinx_), how can you share these secondary y-axis between the subplots? I
want them to scale equally in an automatic way (so not setting the y-limits
afterwards by hand). For the primary y-axis, this is possible by using the
keyword _sharey_ in the call of _subplot_.

Below example shows my attempt, but it fails to share the secondary y-axis of
both subplots. I'm using Matplotlib/Pylab:

    
    
    ax = []
    
    #create upper subplot
    ax.append(subplot(211))
    plot(rand(1) * rand(10),'r')
    
    #create plot on secondary y-axis of upper subplot
    ax.append(ax[0].twinx())
    plot(10*rand(1) * rand(10),'b')
    
    #create lower subplot and share y-axis with primary y-axis of upper subplot
    ax.append(subplot(212, sharey = ax[0]))
    plot(3*rand(1) * rand(10),'g')
    
    #create plot on secondary y-axis of lower subplot
    ax.append(ax[2].twinx())
    #set twinxed axes as the current axes again,
    #but now attempt to share the secondary y-axis
    axes(ax[3], sharey = ax[1])
    plot(10*rand(1) * rand(10),'y')
    

This gets me something like:

![Example of two subplots with failed sharing of secondary
y-axis](http://i.stack.imgur.com/vxw2C.png)

The reason I used the _axes()_ function to set the shared y-axis is that
_twinx_ doesn't accept the _sharey_ keyword.

I'am using Python 3.2 on Win7 x64. Matplotlib version is 1.2.0rc2.


Answer: You can use `Axes.get_shared_y_axes()` like so:

    
    
    from numpy.random import rand
    import matplotlib
    matplotlib.use('gtkagg')
    import matplotlib.pyplot as plt
    
    # create all axes we need
    ax0 = plt.subplot(211)
    ax1 = ax0.twinx()
    ax2 = plt.subplot(212)
    ax3 = ax2.twinx()
    
    # share the secondary axes
    ax1.get_shared_y_axes().join(ax1, ax3)
    
    ax0.plot(rand(1) * rand(10),'r')
    ax1.plot(10*rand(1) * rand(10),'b')
    ax2.plot(3*rand(1) * rand(10),'g')
    ax3.plot(10*rand(1) * rand(10),'y')
    plt.show()
    

Here we're just joining the secondary axes together.

Hope that helps.

