

.. _sphx_glr_gallery_api_two_scales.py:


===========================
Plots with different scales
===========================

Demonstrate how to do two plots on the same axes with different left and
right scales.

The trick is to use *two different axes* that share the same *x* axis.
You can use separate `matplotlib.ticker` formatters and locators as
desired since the two axes are independent.

Such axes are generated by calling the `Axes.twinx` method.  Likewise,
`Axes.twiny` is available to generate axes that share a *y* axis but
have different top and bottom scales.




.. image:: /gallery/api/images/sphx_glr_two_scales_001.png
    :align: center





.. code-block:: python

    import numpy as np
    import matplotlib.pyplot as plt


    def two_scales(ax1, time, data1, data2, c1, c2):
        """

        Parameters
        ----------
        ax : axis
            Axis to put two scales on

        time : array-like
            x-axis values for both datasets

        data1: array-like
            Data for left hand scale

        data2 : array-like
            Data for right hand scale

        c1 : color
            Color for line 1

        c2 : color
            Color for line 2

        Returns
        -------
        ax : axis
            Original axis
        ax2 : axis
            New twin axis
        """
        ax2 = ax1.twinx()

        ax1.plot(time, data1, color=c1)
        ax1.set_xlabel('time (s)')
        ax1.set_ylabel('exp')

        ax2.plot(time, data2, color=c2)
        ax2.set_ylabel('sin')
        return ax1, ax2


    # Create some mock data
    t = np.arange(0.01, 10.0, 0.01)
    s1 = np.exp(t)
    s2 = np.sin(2 * np.pi * t)

    # Create axes
    fig, ax = plt.subplots()
    ax1, ax2 = two_scales(ax, t, s1, s2, 'r', 'b')


    # Change color of each axis
    def color_y_axis(ax, color):
        """Color your axes."""
        for t in ax.get_yticklabels():
            t.set_color(color)
        return None
    color_y_axis(ax1, 'r')
    color_y_axis(ax2, 'b')
    plt.show()

**Total running time of the script:** ( 0 minutes  0.140 seconds)



.. only :: html

 .. container:: sphx-glr-footer


  .. container:: sphx-glr-download

     :download:`Download Python source code: two_scales.py <two_scales.py>`



  .. container:: sphx-glr-download

     :download:`Download Jupyter notebook: two_scales.ipynb <two_scales.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_
