
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "auto_examples/reindex/plot_mock_scatter_plot.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_auto_examples_reindex_plot_mock_scatter_plot.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_reindex_plot_mock_scatter_plot.py:


=======================================================
Re-indexing to mock a scatter plot
=======================================================

This shows how we can superimpose a scatter plot on an existing chart

.. GENERATED FROM PYTHON SOURCE LINES 9-86



.. image-sg:: /auto_examples/reindex/images/sphx_glr_plot_mock_scatter_plot_001.png
   :alt: plot mock scatter plot
   :srcset: /auto_examples/reindex/images/sphx_glr_plot_mock_scatter_plot_001.png
   :class: sphx-glr-single-img





.. code-block:: Python


    import os

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from datetime import datetime

    from indsl.resample.mock_scatter_plot import reindex_scatter, reindex_scatter_x

    # Load the pressure sensor data
    base_path = "" if __name__ == "__main__" else os.path.dirname(__file__)

    # Read in data for a production choke opening
    filename = os.path.join(base_path, "../../datasets/data/pd_series_HCV.pkl")
    HCV_series = pd.read_pickle(filename)


    # Creating a mock CV curve using a sine form
    n = 20
    x_values = np.linspace(0, 100, n)
    y_values = (np.sin(x_values / x_values.max() * np.pi - np.pi * 0.5) + 1) * 0.5
    from scipy.interpolate import interp1d

    # Calculate the CV value for the different choke openings, using the interpolated CV curve
    interpolator = interp1d(x_values, y_values)
    CV_array = interpolator(HCV_series.values)
    # Create the series for the CV value
    CV_series = pd.Series(CV_array, index=HCV_series.index)

    # We normalise choke opening such that [0,100] covers the entrie time range
    scatter_y = reindex_scatter(HCV_series, CV_series, align_timesteps=True)
    scatter_x = reindex_scatter_x(HCV_series)


    fig = plt.figure(figsize=(12, 8))
    lns1 = plt.plot(HCV_series.index, HCV_series.values, "-b", label="Choke opening")
    axl = plt.gca()
    axr = axl.twinx()
    lns2 = axr.plot(scatter_y.index, scatter_y.values, ".r", label="CV curve")
    lns3 = axl.plot(scatter_x.index, scatter_x, ".g", label="Choke opening")
    axl.set_xlabel("Time/choke opening")
    axl.set_ylabel("Choke opening [%]")
    axr.set_ylabel("CV [-]")

    # Adding both time and choke opening for the x-axis.
    xticks_pos = axl.get_xticks()  # Get the position of the existing ticks
    xtick_labels = axl.get_xticklabels()  # Get the date for the existing ticks
    xticks_pos_epoc = [
        datetime.strptime(val.get_text(), "%Y-%m-%d").timestamp() for val in xtick_labels
    ]  # Convert the dates to timestamp

    # Need to convert the timestamp to the corresponding choke opening
    epoc_start = HCV_series.index[0].timestamp()
    epoc_end = HCV_series.index[-1].timestamp()
    d_epoc = epoc_end - epoc_start
    # The scale of HCV_series is [x_min_value,x_max_value]. We will now map it to the epoc and then convert it to datetime
    x_min_value = 0
    x_max_value = 100
    xtic_labels_hcv = [
        (val - epoc_start) / d_epoc * (x_max_value - x_min_value) for val in xticks_pos_epoc
    ]  # gives us the HCV value for the corresponding points
    # Create the tick label consisting of the date, and the choke opening value on a new line
    xtick_labels_mod = [
        val1.get_text() + "\n" + "%1.3g" % (min([max([val2, x_min_value]), x_max_value]))
        for (val1, val2) in zip(xtick_labels, xtic_labels_hcv)
    ]
    # Finally update the x-tics values
    plt.xticks(xticks_pos, xtick_labels_mod)

    # added the lines to the legend
    lns = lns1 + lns2 + lns3
    labs = [l.get_label() for l in lns]
    plt.legend(lns, labs, loc=4)
    plt.xlim([HCV_series.index[0], HCV_series.index[-1]])
    plt.tight_layout()
    plt.show()


.. rst-class:: sphx-glr-timing

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


.. _sphx_glr_download_auto_examples_reindex_plot_mock_scatter_plot.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

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

    .. container:: sphx-glr-download sphx-glr-download-python

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

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_mock_scatter_plot.zip <plot_mock_scatter_plot.zip>`


.. only:: html

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

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