diff --git a/UI/FigDischargeDistribution.py b/UI/FigDischargeDistribution.py index 6c3b8b5ec1baad0aece26fd1437bbb99ef528ddd..9616d3a028ca6fcb27a280c4a75dedc3e899187d 100644 --- a/UI/FigDischargeDistribution.py +++ b/UI/FigDischargeDistribution.py @@ -129,7 +129,7 @@ class FigDischargeDistribution(object): grouped_meas = pd.concat([grouped_meas, grouped_sort], axis=1) grouped_meas = grouped_meas.sort_values('column_sorted', ascending=ascending) else: - grouped_meas = selected_transects.groupby([col_group_by]).agg({'tr_q_total': list}) + # grouped_meas = selected_transects.groupby([col_group_by]).agg({'tr_q_total': list}) grouped_meas = grouped_meas.sort_values([col_group_by], ascending=ascending) grouped_meas.tr_q_total = [[x for x in y if not np.isnan(x)] for y in grouped_meas.tr_q_total] @@ -154,8 +154,27 @@ class FigDischargeDistribution(object): data = [[self.units['Q'] * i for i in inner] for inner in grouped_meas['tr_q_total']] nanmean = [np.nanmean(i) for i in data] - legends.append(mpatches.Patch(facecolor='darkorange', edgecolor="k", linewidth=1))##36ed00 - score_color = False + + # Select color + colors = [] + if score_color: + # score = np.abs(300 * (nanmean - discharge_ref) / (discharge_ref * deviation)) + for name in list(grouped_meas.index): + score = mean_selected_meas.loc[name, 'score'] + if not score: + colors.append('darkorange') + elif score <= 2: + colors.append('#36ed00') + elif score <= 3: + colors.append('#ffcc00') + else: + colors.append('#ff004d') + else: + colors = ['darkorange'] * len(nanmean) + + # Add boxplot to legend + legends.append(mpatches.Patch(facecolor=colors[0], edgecolor="k", linewidth=1))##36ed00 + # Plot boxplot/violinplot if len(data) > 0: if violin: @@ -163,38 +182,23 @@ class FigDischargeDistribution(object): showmedians=False, showextrema=False ) - if score_color: - score = np.abs(300 * (nanmean - discharge_ref) / (discharge_ref * deviation)) - color = [] - for i in score: - if i <= 2: - color.append('#36ed00') - elif i <= 3: - color.append('#ffcc00') - else: - color.append('#ff004d') - j = -1 - for violin in violin_plot['bodies']: - j += 1 - violin.set_facecolor(color[j]) - violin.set_edgecolor('black') - violin.set_alpha(1) - else: - for violin in violin_plot['bodies']: - violin.set_facecolor('darkorange') - violin.set_edgecolor('black') - violin.set_alpha(1) + for violin, color in zip(violin_plot['bodies'], colors): + violin.set_facecolor(color) + violin.set_edgecolor('black') + violin.set_alpha(1) p5 = self.fig.ax.scatter(np.arange(len_meas), nanmean, marker='o', color='k', s=30, zorder=3) legends.append(p5) label_txt.append(self._translate("Main", 'Mean value')) else: - self.fig.ax.boxplot(data, positions=np.arange(len_meas), + bp = self.fig.ax.boxplot(data, positions=np.arange(len_meas), whis=[0, 100], patch_artist=True, - boxprops=dict(facecolor='darkorange', edgecolor='k'), + boxprops=dict(edgecolor='k'), medianprops=dict(color='k'), whiskerprops=dict(color='k', linewidth=1), capprops=dict(color='k', linewidth=1), ) + for patch, color in zip(bp['boxes'], colors): + patch.set_facecolor(color) # Show number of transects if show_nb_transects: for i in range(len_meas): diff --git a/UI/main.py b/UI/main.py index e24ddb4591d4a651bbc9e0ec6f8c64359d27e381..b20e317a02713287e03e069c8e51f9e086952517 100644 --- a/UI/main.py +++ b/UI/main.py @@ -246,6 +246,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): Plot distribution graph errorbox as violin q_distribution_nb_transects: bool Plot distribution graph number of transects per measurement + q_distribution_color_score: bool + Plot distribution graph with color based on the z score canvases: list List of canvases @@ -430,6 +432,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): # Distribution Figure self.q_distribution_violin = False self.q_distribution_nb_transects = False + self.q_distribution_color_score = False self.canvases = None self.figs = None @@ -490,6 +493,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): self.cb_violin.clicked.connect(lambda: self.update_param(self.cb_violin, 'q_distribution_violin', [3])) self.cb_nb_transect.clicked.connect(lambda: self.update_param(self.cb_nb_transect, 'q_distribution_nb_transects', [3])) + self.cb_color_score.clicked.connect(lambda: self.update_param(self.cb_color_score, + 'q_distribution_color_score', [3])) # Toolbar self.actionOpen.triggered.connect(self.open_data) @@ -722,6 +727,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): # Remove same name rows self.results_import_df = self.results_import_df[ ~self.results_import_df['meas_name'].isin(new_meas_names)] + self.transects_df = self.transects_df[ + ~self.transects_df['meas_name'].isin(new_meas_names)] # Add new data self.results_import_df = self.results_import_df.append(measurements_csv) self.results_import_df = self.results_import_df.reset_index(drop=True) @@ -3083,7 +3090,8 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): column_sorted=self.column_sorted, ascending=self.ascending, violin=self.q_distribution_violin, - show_nb_transects=self.q_distribution_nb_transects, ) + show_nb_transects=self.q_distribution_nb_transects, + score_color=self.q_distribution_color_score) # Draw canvas self.discharge_distribution_canvas.draw() diff --git a/UI/main_window.py b/UI/main_window.py index 8147899f8c3835b8a95879efcea85ca9216ef7a0..f22a028327391fe6b9b309320266886c969640e2 100644 --- a/UI/main_window.py +++ b/UI/main_window.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'main_window.ui' +# Form implementation generated from reading ui file 'UI\main_window.ui' # # Created by: PyQt5 UI code generator 5.15.9 # @@ -98,6 +98,9 @@ class Ui_MainWindow(object): self.cb_nb_transect = QtWidgets.QCheckBox(self.tab_q_distribution) self.cb_nb_transect.setObjectName("cb_nb_transect") self.verticalLayout_2.addWidget(self.cb_nb_transect) + self.cb_color_score = QtWidgets.QCheckBox(self.tab_q_distribution) + self.cb_color_score.setObjectName("cb_color_score") + self.verticalLayout_2.addWidget(self.cb_color_score) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem) self.horizontalLayout_2.addLayout(self.verticalLayout_2) @@ -214,6 +217,11 @@ class Ui_MainWindow(object): self.actionAddMeasurement.setIcon(icon8) self.actionAddMeasurement.setIconText("AddMeasurement") self.actionAddMeasurement.setObjectName("actionAddMeasurement") + self.actionKML = QtWidgets.QAction(MainWindow) + icon9 = QtGui.QIcon() + icon9.addPixmap(QtGui.QPixmap(":/images/images/Globe.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionKML.setIcon(icon9) + self.actionKML.setObjectName("actionKML") self.menuOpen.addAction(self.actionOpen_data) self.menuOpen.addAction(self.actionOpen_results) self.menuFile.addAction(self.menuOpen.menuAction()) @@ -234,6 +242,8 @@ class Ui_MainWindow(object): self.toolbar.addAction(self.actionHomeGraph) self.toolbar.addAction(self.actionZoomGraph) self.toolbar.addAction(self.actionPanGraph) + self.toolbar.addSeparator() + self.toolbar.addAction(self.actionKML) self.retranslateUi(MainWindow) self.tab_all.setCurrentIndex(0) @@ -247,6 +257,7 @@ class Ui_MainWindow(object): self.tab_all.setTabText(self.tab_all.indexOf(self.tab_u_sources), _translate("MainWindow", "Uncertainty sources")) self.cb_violin.setText(_translate("MainWindow", "Violin")) self.cb_nb_transect.setText(_translate("MainWindow", "# Transects")) + self.cb_color_score.setText(_translate("MainWindow", "Color score")) self.tab_all.setTabText(self.tab_all.indexOf(self.tab_q_distribution), _translate("MainWindow", "Discharge distribution")) self.tab_all.setTabText(self.tab_all.indexOf(self.tab_q_correction), _translate("MainWindow", "Discharge correction")) self.menuFile.setTitle(_translate("MainWindow", "File")) @@ -280,6 +291,8 @@ class Ui_MainWindow(object): self.actionAddMeasurement.setText(_translate("MainWindow", "AddMeasurement")) self.actionAddMeasurement.setToolTip(_translate("MainWindow", "Add measurement")) self.actionAddMeasurement.setShortcut(_translate("MainWindow", "Ctrl+F")) + self.actionKML.setText(_translate("MainWindow", "KML")) + self.actionKML.setToolTip(_translate("MainWindow", "Export as KML")) import resources_rc diff --git a/UI/main_window.ui b/UI/main_window.ui index 26e103ba7a1f953abba3ebfd019a143dba3ac064..43eebd10358ee0890917c3664654e779a0ec5eda 100644 --- a/UI/main_window.ui +++ b/UI/main_window.ui @@ -131,6 +131,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="cb_color_score"> + <property name="text"> + <string>Color score</string> + </property> + </widget> + </item> <item> <spacer name="verticalSpacer"> <property name="orientation">