Skip to content

Commit 40808f4

Browse files
authored
Merge pull request #4209 from janezd/heatmap-label-by-any
[ENH] Heatmap: Allow labeling by any variable
2 parents fe59e83 + 1326aaf commit 40808f4

File tree

1 file changed

+14
-31
lines changed

1 file changed

+14
-31
lines changed

Orange/widgets/visualize/owheatmap.py

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
)
2525
import pyqtgraph as pg
2626

27-
from Orange.data import Domain, Table, DiscreteVariable, StringVariable, \
28-
TimeVariable
27+
from Orange.data import Domain, Table
2928
from Orange.data.sql.table import SqlTable
3029
import Orange.distance
3130

3231
from Orange.clustering import hierarchical, kmeans
32+
from Orange.widgets.utils.itemmodels import DomainModel
3333
from Orange.widgets.utils.stickygraphicsview import StickyGraphicsView
3434
from Orange.widgets.utils import colorbrewer
3535
from Orange.widgets.utils.annotated_data import (create_annotated_table,
@@ -417,7 +417,7 @@ class Outputs:
417417
# Display legend
418418
legend = settings.Setting(True)
419419
# Annotations
420-
annotation_index = settings.ContextSetting(0)
420+
annotation_var = settings.ContextSetting(None)
421421
# Stored color palette settings
422422
color_settings = settings.Setting(None)
423423
user_palettes = settings.Setting([])
@@ -552,9 +552,10 @@ def __init__(self):
552552

553553
annotbox = gui.vBox(box, "Row Annotations", addSpace=False)
554554
annotbox.setFlat(True)
555-
self.annotations_cb = gui.comboBox(
556-
annotbox, self, "annotation_index", contentsLength=12,
557-
items=self.annotation_vars, callback=self.update_annotations)
555+
self.annotation_model = DomainModel(placeholder="(None)")
556+
gui.comboBox(
557+
annotbox, self, "annotation_var", contentsLength=12,
558+
model=self.annotation_model, callback=self.update_annotations)
558559

559560
posbox = gui.vBox(box, "Column Labels Position", addSpace=False)
560561
posbox.setFlat(True)
@@ -623,9 +624,8 @@ def clear(self):
623624
self.effective_data = None
624625
self.kmeans_model = None
625626
self.merge_indices = None
626-
self.annotations_cb.clear()
627-
self.annotations_cb.addItem('(None)')
628-
self.annotation_vars = ['(None)']
627+
self.annotation_model.set_domain(None)
628+
self.annotation_var = None
629629
self.clear_scene()
630630
self.selected_rows = []
631631
self.__columns_cache.clear()
@@ -703,19 +703,9 @@ def set_dataset(self, data=None):
703703
self.input_data = input_data
704704

705705
if data is not None:
706-
variables = self.data.domain.class_vars + self.data.domain.metas
707-
variables = [var for var in variables
708-
if isinstance(var, (DiscreteVariable,
709-
StringVariable,
710-
TimeVariable))]
711-
self.annotation_vars.extend(variables)
712-
713-
for var in variables:
714-
self.annotations_cb.addItem(*gui.attributeItem(var))
715-
716-
self.openContext(self.data)
717-
if self.annotation_index >= len(self.annotation_vars):
718-
self.annotation_index = 0
706+
self.annotation_model.set_domain(self.input_data.domain)
707+
self.annotation_var = None
708+
self.openContext(self.input_data)
719709

720710
self.update_heatmaps()
721711
if data is not None and self.__pending_selection is not None:
@@ -1410,13 +1400,7 @@ def update_legend(self):
14101400

14111401
def update_annotations(self):
14121402
if self.input_data is not None:
1413-
if self.annotation_vars:
1414-
var = self.annotation_vars[self.annotation_index]
1415-
if var == '(None)':
1416-
var = None
1417-
else:
1418-
var = None
1419-
1403+
var = self.annotation_var
14201404
show = var is not None
14211405
if show:
14221406
annot_col, _ = self.input_data.get_column_view(var)
@@ -1538,8 +1522,7 @@ def send_report(self):
15381522
("Columns:", "Clustering" if self.col_clustering else "No sorting"),
15391523
("Rows:", "Clustering" if self.row_clustering else "No sorting"),
15401524
("Row annotation",
1541-
self.annotation_index > 0 and
1542-
self.annotation_vars[self.annotation_index])
1525+
self.annotation_var is not None and self.annotation_var.name)
15431526
))
15441527
self.report_plot()
15451528

0 commit comments

Comments
 (0)