From df5dbe122705e5626a41bedbad7f73de1c7e9105 Mon Sep 17 00:00:00 2001
From: Olivier Jossoud <olivier.jossoud@lsce.ipsl.fr>
Date: Wed, 23 Oct 2019 10:26:53 +0200
Subject: [PATCH] Pumpcalib. Linear regression line. (+legend, not really
 working)

---
 pyqt/mainwindow.ui                          | 18 ++++----
 src/gui/uimainwindow.py                     | 14 +++---
 src/main.py                                 |  2 +-
 src/uim/{pumpcalibim.py => pumpcalibuim.py} | 51 +++++++++++++++++----
 4 files changed, 58 insertions(+), 27 deletions(-)
 rename src/uim/{pumpcalibim.py => pumpcalibuim.py} (54%)

diff --git a/pyqt/mainwindow.ui b/pyqt/mainwindow.ui
index 3e7d29f..50a2897 100644
--- a/pyqt/mainwindow.ui
+++ b/pyqt/mainwindow.ui
@@ -176,7 +176,7 @@
          <x>10</x>
          <y>20</y>
          <width>371</width>
-         <height>31</height>
+         <height>32</height>
         </rect>
        </property>
        <layout class="QHBoxLayout" name="horizontalLayout_4">
@@ -207,7 +207,7 @@
         <rect>
          <x>15</x>
          <y>70</y>
-         <width>281</width>
+         <width>271</width>
          <height>161</height>
         </rect>
        </property>
@@ -221,10 +221,10 @@
        </property>
        <property name="geometry">
         <rect>
-         <x>301</x>
+         <x>291</x>
          <y>70</y>
-         <width>81</width>
-         <height>23</height>
+         <width>91</width>
+         <height>31</height>
         </rect>
        </property>
        <property name="text">
@@ -459,8 +459,8 @@
        <rect>
         <x>10</x>
         <y>10</y>
-        <width>111</width>
-        <height>22</height>
+        <width>141</width>
+        <height>31</height>
        </rect>
       </property>
       <item>
@@ -483,7 +483,7 @@
       <property name="geometry">
        <rect>
         <x>10</x>
-        <y>40</y>
+        <y>50</y>
         <width>831</width>
         <height>431</height>
        </rect>
@@ -508,7 +508,7 @@
      <x>0</x>
      <y>0</y>
      <width>1355</width>
-     <height>20</height>
+     <height>26</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuInstrument">
diff --git a/src/gui/uimainwindow.py b/src/gui/uimainwindow.py
index ffdf390..cb2970f 100644
--- a/src/gui/uimainwindow.py
+++ b/src/gui/uimainwindow.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Form implementation generated from reading ui file '..\pyqt\mainwindow.ui'
+# Form implementation generated from reading ui file '../pyqt/mainwindow.ui'
 #
 # Created by: PyQt5 UI code generator 5.11.3
 #
@@ -75,7 +75,7 @@ class Ui_MainWindow(object):
         self.explo_groupbox_setups.setGeometry(QtCore.QRect(950, 10, 391, 241))
         self.explo_groupbox_setups.setObjectName("explo_groupbox_setups")
         self.horizontalLayoutWidget_4 = QtWidgets.QWidget(self.explo_groupbox_setups)
-        self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 371, 31))
+        self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 371, 32))
         self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
         self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
         self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
@@ -91,12 +91,12 @@ class Ui_MainWindow(object):
         self.explo_pushbutton_setup_save.setObjectName("explo_pushbutton_setup_save")
         self.horizontalLayout_4.addWidget(self.explo_pushbutton_setup_save)
         self.explo_listwidget_setup_list = QtWidgets.QListWidget(self.explo_groupbox_setups)
-        self.explo_listwidget_setup_list.setGeometry(QtCore.QRect(15, 70, 281, 161))
+        self.explo_listwidget_setup_list.setGeometry(QtCore.QRect(15, 70, 271, 161))
         self.explo_listwidget_setup_list.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
         self.explo_listwidget_setup_list.setObjectName("explo_listwidget_setup_list")
         self.explo_pushbutton_setup_load = QtWidgets.QPushButton(self.explo_groupbox_setups)
         self.explo_pushbutton_setup_load.setEnabled(False)
-        self.explo_pushbutton_setup_load.setGeometry(QtCore.QRect(301, 70, 81, 23))
+        self.explo_pushbutton_setup_load.setGeometry(QtCore.QRect(291, 70, 91, 31))
         self.explo_pushbutton_setup_load.setObjectName("explo_pushbutton_setup_load")
         self.tabWidget.addTab(self.tab_explo, "")
         self.tab_conductcalib = QtWidgets.QWidget()
@@ -178,13 +178,13 @@ class Ui_MainWindow(object):
         self.tab_pumpcalib = QtWidgets.QWidget()
         self.tab_pumpcalib.setObjectName("tab_pumpcalib")
         self.pump_combobox_pump = QtWidgets.QComboBox(self.tab_pumpcalib)
-        self.pump_combobox_pump.setGeometry(QtCore.QRect(10, 10, 111, 22))
+        self.pump_combobox_pump.setGeometry(QtCore.QRect(10, 10, 141, 31))
         self.pump_combobox_pump.setObjectName("pump_combobox_pump")
         self.pump_combobox_pump.addItem("")
         self.pump_combobox_pump.addItem("")
         self.pump_combobox_pump.addItem("")
         self.pump_graphicsview_runs = PlotWidget(self.tab_pumpcalib)
-        self.pump_graphicsview_runs.setGeometry(QtCore.QRect(10, 40, 831, 431))
+        self.pump_graphicsview_runs.setGeometry(QtCore.QRect(10, 50, 831, 431))
         self.pump_graphicsview_runs.setObjectName("pump_graphicsview_runs")
         self.pump_graphicsview_repro = PlotWidget(self.tab_pumpcalib)
         self.pump_graphicsview_repro.setGeometry(QtCore.QRect(10, 490, 831, 431))
@@ -192,7 +192,7 @@ class Ui_MainWindow(object):
         self.tabWidget.addTab(self.tab_pumpcalib, "")
         MainWindow.setCentralWidget(self.centralwidget)
         self.menubar = QtWidgets.QMenuBar(MainWindow)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 1355, 20))
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1355, 26))
         self.menubar.setObjectName("menubar")
         self.menuInstrument = QtWidgets.QMenu(self.menubar)
         self.menuInstrument.setObjectName("menuInstrument")
diff --git a/src/main.py b/src/main.py
index b9509aa..0cc5989 100755
--- a/src/main.py
+++ b/src/main.py
@@ -14,7 +14,7 @@ from dataprovider.pumpcalibprovider import PumpCalibProvider
 
 from uim.conductcalibuim import ConductCalibUim
 from uim.explouim import ExploUim
-from uim.pumpcalibim import PumpCalibUim
+from uim.pumpcalibuim import PumpCalibUim
 
 ########################################################################################################################
 # CONFIG
diff --git a/src/uim/pumpcalibim.py b/src/uim/pumpcalibuim.py
similarity index 54%
rename from src/uim/pumpcalibim.py
rename to src/uim/pumpcalibuim.py
index b1e320e..77c2df0 100644
--- a/src/uim/pumpcalibim.py
+++ b/src/uim/pumpcalibuim.py
@@ -1,5 +1,6 @@
 import datetime
 import re
+from math import atan, degrees
 import pyqtgraph as pg
 from PyQt5.QtWidgets import *
 from PyQt5.QtGui import QColor
@@ -65,19 +66,49 @@ class PumpCalibUim:
         self.runs_points_list = []
 
     def __update_runs_plot__(self, runs_df: pd.DataFrame, coef_df: pd.DataFrame) -> None:
-
+        # Create the color scale
         color_map = pg.ColorMap(pos=[runs_df["calib_id_int"].min(),
                                      runs_df["calib_id_int"].max()],
                                 color=[[0, 0, 255], [0, 255, 0]])
-        brushes = [pg.mkBrush(color=color) for color in color_map.mapToQColor(runs_df["calib_id_int"])]
-
-        runs_points = pg.ScatterPlotItem(runs_df["rpm"],
-                                         runs_df["flow"],
-                                         size=5,
-                                         brush=brushes)
 
-        self.plot_item.addItem(runs_points)
+        # Add legend
+        # self.plot_item.addLegend((100,60), offset=(70,30))
+        # self.plot_item.plot([1, 3, 2, 4], pen='r', name='red plot')
+        # l = pg.LegendItem((100,60), offset=(70,30))  # args are (size, offset)
+        l = pg.LegendItem()  # args are (size, offset)
+        l.setParentItem(self.plot_item.graphicsItem())   # Note we do NOT call plt.addItem in this case
 
         # Add linear regression line
-        # self.linear_line = pg.PlotCurveItem()
-        # plot_item.addItem(self.linear_line)
+        for row_id, row in coef_df.iterrows():
+            reg_line = pg.InfiniteLine(pos=QPointF(0, row["intercept"]),
+                                       angle=degrees(atan(row["slope"])),
+                                       pen=pg.mkPen(color=color_map.mapToQColor(row["calib_id_int"])),
+                                       name=row["calib_id_str"])
+            self.plot_item.addItem(reg_line)
+
+        # Add runs points
+        for calib_id in runs_df["calib_id_int"].unique():
+            run_df = runs_df[runs_df["calib_id_int"] == calib_id]
+            # brushes = [pg.mkBrush(color=color) for color in color_map.mapToQColor(runs_df["calib_id_int"])]
+            run_points = pg.ScatterPlotItem(run_df["rpm"],
+                                             run_df["flow"],
+                                             size=6,
+                                             brush=color_map.mapToQColor(calib_id),
+                                             name=run_df["calib_id_str"].unique())
+            l.addItem(run_points,run_df["calib_id_str"].unique())
+            self.plot_item.addItem(run_points)
+
+
+
+
+        # Add runs text
+        # for row_id, row in runs_df.iterrows():
+        #     if row_id != 1:
+        #         continue
+        #     run_text = pg.TextItem(text=row["calib_id_str"],
+        #                            # color=color_map.mapToQColor(row["calib_id_int"]),
+        #                            anchor=QPointF(row["rpm"], row["flow"]))
+        #     # self.plot_item.getViewBox().disableAutoRange()
+        #     self.plot_item.addItem(run_text)
+        #     # self.plot_item.addItem(run_text, ignoreBounds=True)
+
-- 
GitLab