Skip to content

Commit

Permalink
Add hue selection to centile view
Browse files Browse the repository at this point in the history
  • Loading branch information
MUSA-650 committed May 25, 2024
1 parent 2ffdc45 commit aca4373
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 5 deletions.
20 changes: 16 additions & 4 deletions NiChart_Viewer/core/datautils.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,24 @@ def DataPlotScatter(axes, df, x_var, y_var, hue_var=''):
axes.set(xlabel=x_var)
axes.set(ylabel=y_var)

def DataPlotWithCentiles(axes, df, x_var, y_var, df_cent, cent_type):
def DataPlotWithCentiles(axes, df, x_var, y_var, df_cent, cent_type, hue_var=''):
'''Plot
'''

tmp_pal = ["#00ff00", "#0000ff"]
sns.scatterplot(data = df, x = x_var, y = y_var, hue = 'Sex', palette = tmp_pal, ax=axes)
tmp_pal = ["#00ff00", "#0000ff", "#000000"]

tmp_pal = ["#D2D68D", "#D8534D", "#12664F", "#2DC2BD", "#FB8B24", "#F5FF90"]

tmp_pal = ["#00AF54", "#06070E", "#FB8B24", "#2A2B2A", "#706C61", "#FB8B24", "#E5446D"]

hue_var_default = 'Sex'
if hue_var not in df.columns:
hue_var = hue_var_default

hue_order = df[hue_var].sort_values().unique()

sns.scatterplot(data = df, x = x_var, y = y_var, hue = hue_var, hue_order = hue_order,
palette = tmp_pal, ax=axes)

df_tmp = df_cent[df_cent.ROI_Name == y_var]
cent_vals = df_tmp.columns[df_tmp.columns.str.contains('centile')].tolist()
Expand All @@ -97,7 +109,7 @@ def DataPlotWithCentiles(axes, df, x_var, y_var, df_cent, cent_type):
palette = tmp_pal,
ax=axes)

g.legend_.set_title('Sex')
g.legend_.set_title(hue_var)
axes.yaxis.set_ticks_position('left')
axes.xaxis.set_ticks_position('bottom')
sns.despine(fig=axes.get_figure(), trim=True)
Expand Down
28 changes: 27 additions & 1 deletion NiChart_Viewer/plugins/centileview/centileview.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ def __init__(self):
self.ui.comboYVar.setEditable(False)
self.ui.vlComboY.addWidget(self.ui.comboYVar)

## Panel for Hue var
self.ui.comboHueVar = QComboBox(self.ui)
self.ui.comboHueVar.setEditable(False)
self.ui.vlComboHue.addWidget(self.ui.comboHueVar)

## Options panel is not shown if there is no dataset loaded
#self.ui.wOptions.hide()
#self.ui.wVars.hide()
Expand All @@ -77,6 +82,8 @@ def SetupConnections(self):

self.data_model_arr.active_dset_changed.connect(lambda: self.OnDataChanged())

self.ui.comboHueVar.currentIndexChanged.connect(lambda: self.OnHueIndexChanged())

self.ui.comboCentileType.currentIndexChanged.connect(self.OnCentileTypeChanged)
self.ui.plotBtn.clicked.connect(lambda: self.OnPlotBtnClicked())

Expand Down Expand Up @@ -120,6 +127,8 @@ def OnPlotBtnClicked(self):
## Get user selections
x_var = 'Age'

hue_var = self.ui.comboHueVar.currentText()

## Prepare plot canvas
self.plotCanvas = PlotCanvas(self.ui)
self.plotCanvas.axes = self.plotCanvas.fig.add_subplot(111)
Expand All @@ -133,7 +142,7 @@ def OnPlotBtnClicked(self):
self.statusbar.showMessage('Centile cols : ' + ','.join(self.df_cent.ROI_Name.unique()), 8000)

#DataPlotScatter(self.plotCanvas.axes, df_out, x_var, y_var)
DataPlotWithCentiles(self.plotCanvas.axes, df_out, x_var, y_var, self.df_cent, self.selCentileType)
DataPlotWithCentiles(self.plotCanvas.axes, df_out, x_var, y_var, self.df_cent, self.selCentileType, hue_var)

self.plotCanvas.draw()

Expand Down Expand Up @@ -202,10 +211,27 @@ def OnDataChanged(self):

## Update selection, sorting and drop duplicates panels
self.UpdatePanels(colNames)

def OnHueIndexChanged(self):

TH_NUM_UNIQ = 20

selHue = self.ui.comboHueVar.currentText()
#selHueVals = self.data_model_arr.datasets[self.active_index].data.unique()

#if len(selHueVals) > TH_NUM_UNIQ:
#self.errmsg.showMessage('Too many unique values for selection (' +
#str(len(selHueVals)) + '), skip')
#return
#self.PopulateComboBox(self.ui.comboHueVal, selHueVals)
#self.ui.comboHueVal.show()


def UpdatePanels(self, colNames):

self.PopulateComboBox(self.ui.comboYVar, colNames, '--var name--')
self.PopulateComboBox(self.ui.comboHueVar, colNames, '--var name--')


# Add the values to comboBox
def PopulateComboBox(self, cbox, values, strPlaceholder = None, bypassCheckable=False):
Expand Down
38 changes: 38 additions & 0 deletions NiChart_Viewer/plugins/centileview/centileview.ui
Original file line number Diff line number Diff line change
Expand Up @@ -170,13 +170,15 @@
<property name="rightMargin">
<number>0</number>
</property>

<item>
<widget class="QLabel" name="label_select">
<property name="text">
<string>Y Var</string>
</property>
</widget>
</item>

<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
Expand All @@ -202,6 +204,42 @@
</item>
</layout>
</item>

<item>
<widget class="QLabel" name="label_select">
<property name="text">
<string>Hue Var</string>
</property>
</widget>
</item>

<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>

<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>

<property name="sizeHint" stdset="0">
<size>
<width>30</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="vlComboHue"/>
</item>
</layout>
</item>


</layout>
</widget>
</item>
Expand Down

0 comments on commit aca4373

Please sign in to comment.