Skip to content

Commit 11b4b3f

Browse files
authored
Merge pull request #4102 from VesnaT/scatterplot_disable_vizrank
[FIX] Scatterplot: Disable vizrank when features on input
2 parents c7976c0 + 0495c0f commit 11b4b3f

File tree

2 files changed

+34
-17
lines changed

2 files changed

+34
-17
lines changed

Orange/widgets/visualize/owscatterplot.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -274,18 +274,18 @@ def _add_controls_axis(self):
274274
labelWidth=50, orientation=Qt.Horizontal, sendSelectedValue=True,
275275
valueType=str, contentsLength=14
276276
)
277-
box = gui.vBox(self.controlArea, True)
277+
self.attr_box = gui.vBox(self.controlArea, True)
278278
dmod = DomainModel
279279
self.xy_model = DomainModel(dmod.MIXED, valid_types=ContinuousVariable)
280280
self.cb_attr_x = gui.comboBox(
281-
box, self, "attr_x", label="Axis x:",
281+
self.attr_box, self, "attr_x", label="Axis x:",
282282
callback=self.set_attr_from_combo,
283283
model=self.xy_model, **common_options)
284284
self.cb_attr_y = gui.comboBox(
285-
box, self, "attr_y", label="Axis y:",
285+
self.attr_box, self, "attr_y", label="Axis y:",
286286
callback=self.set_attr_from_combo,
287287
model=self.xy_model, **common_options)
288-
vizrank_box = gui.hBox(box)
288+
vizrank_box = gui.hBox(self.attr_box)
289289
self.vizrank, self.vizrank_button = ScatterPlotVizRank.add_vizrank(
290290
vizrank_box, self, "Find Informative Projections", self.set_attr)
291291

@@ -318,6 +318,7 @@ def _vizrank_color_change(self):
318318

319319
def set_data(self, data):
320320
super().set_data(data)
321+
self._vizrank_color_change()
321322

322323
def findvar(name, iterable):
323324
"""Find a Orange.data.Variable in `iterable` by name"""
@@ -437,17 +438,19 @@ def set_subset_data(self, subset_data):
437438

438439
# called when all signals are received, so the graph is updated only once
439440
def handleNewSignals(self):
441+
self.attr_box.setEnabled(True)
442+
self.vizrank.setEnabled(True)
440443
if self.attribute_selection_list and self.data is not None and \
441444
self.data.domain is not None and \
442445
all(attr in self.data.domain for attr
443446
in self.attribute_selection_list):
444447
self.attr_x, self.attr_y = self.attribute_selection_list[:2]
445-
self.attribute_selection_list = None
448+
self.attr_box.setEnabled(False)
449+
self.vizrank.setEnabled(False)
446450
super().handleNewSignals()
447451
if self._domain_invalidated:
448452
self.graph.update_axes()
449453
self._domain_invalidated = False
450-
self._vizrank_color_change()
451454

452455
@Inputs.features
453456
def set_shown_attributes(self, attributes):
@@ -516,5 +519,6 @@ def migrate_context(cls, context, version):
516519

517520

518521
if __name__ == "__main__": # pragma: no cover
519-
data = Table("iris")
520-
WidgetPreview(OWScatterPlot).run(set_data=data, set_subset_data=data[:30])
522+
table = Table("iris")
523+
WidgetPreview(OWScatterPlot).run(set_data=table,
524+
set_subset_data=table[:30])

Orange/widgets/visualize/tests/test_owscatterplot.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -318,18 +318,31 @@ def test_features_and_no_data(self):
318318
self.send_signal(self.widget.Inputs.features, None)
319319

320320
def test_features_and_data(self):
321-
data = Table("iris")
322-
self.send_signal(self.widget.Inputs.data, data)
321+
self.assertTrue(self.widget.attr_box.isEnabled())
322+
self.send_signal(self.widget.Inputs.data, self.data)
323323
x, y = self.widget.graph.scatterplot_item.getData()
324-
np.testing.assert_array_equal(x, data.X[:, 0])
325-
np.testing.assert_array_equal(y, data.X[:, 1])
324+
np.testing.assert_array_equal(x, self.data.X[:, 0])
325+
np.testing.assert_array_equal(y, self.data.X[:, 1])
326326
self.send_signal(self.widget.Inputs.features,
327-
AttributeList(data.domain[2:]))
328-
self.assertIs(self.widget.attr_x, data.domain[2])
329-
self.assertIs(self.widget.attr_y, data.domain[3])
327+
AttributeList(self.data.domain[2:]))
328+
self.assertIs(self.widget.attr_x, self.data.domain[2])
329+
self.assertIs(self.widget.attr_y, self.data.domain[3])
330+
self.assertFalse(self.widget.attr_box.isEnabled())
331+
self.assertFalse(self.widget.vizrank.isEnabled())
330332
x, y = self.widget.graph.scatterplot_item.getData()
331-
np.testing.assert_array_equal(x, data.X[:, 2])
332-
np.testing.assert_array_equal(y, data.X[:, 3])
333+
np.testing.assert_array_equal(x, self.data.X[:, 2])
334+
np.testing.assert_array_equal(y, self.data.X[:, 3])
335+
336+
self.send_signal(self.widget.Inputs.data, None)
337+
self.send_signal(self.widget.Inputs.data, self.data)
338+
self.assertIs(self.widget.attr_x, self.data.domain[2])
339+
self.assertIs(self.widget.attr_y, self.data.domain[3])
340+
self.assertFalse(self.widget.attr_box.isEnabled())
341+
self.assertFalse(self.widget.vizrank.isEnabled())
342+
343+
self.send_signal(self.widget.Inputs.features, None)
344+
self.assertTrue(self.widget.attr_box.isEnabled())
345+
self.assertTrue(self.widget.vizrank.isEnabled())
333346

334347
def test_output_features(self):
335348
data = Table("iris")

0 commit comments

Comments
 (0)