.. 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 ` 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 ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_mock_scatter_plot.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_mock_scatter_plot.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_