Skip to content

Commit 2dcb66f

Browse files
authored
Merge pull request #2068 from janezd/fix-distribution-discretize-meta
[FIX] OWDistributions: Fix binning of meta attributes
2 parents eb53e99 + 44d2e08 commit 2dcb66f

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

Orange/widgets/visualize/owdistributions.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,12 @@ def _setup(self):
287287
if self.var is None:
288288
return
289289
if self.disc_cont:
290-
data = self.data[:, (self.var, self.cvar) if self.cvar else self.var ]
290+
domain = Orange.data.Domain(
291+
[self.var, self.cvar] if self.cvar else [self.var])
292+
data = Orange.data.Table(domain, data)
291293
disc = Orange.preprocess.discretize.EqualWidth(n=self.bins[self.smoothing_index])
292294
data = Orange.preprocess.Discretize(method=disc, remove_const=False)(data)
293-
self.var = (list(data.domain) + list(data.domain.metas))[0]
295+
self.var = data.domain[0]
294296
self.set_left_axis_name()
295297
self.enable_disable_rel_freq()
296298
if self.cvar:

Orange/widgets/visualize/tests/test_owdistributions.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Test methods with long descriptive names can omit docstrings
22
# pylint: disable=missing-docstring
33

4-
from Orange.data import Table
4+
from Orange.data import Table, Domain, DiscreteVariable
55
from Orange.data.table import dataset_dirs
66
from Orange.tests import test_dirname
77
from Orange.widgets.tests.base import WidgetTest
@@ -43,3 +43,17 @@ def test_remove_data(self):
4343
self.send_signal("Data", None)
4444
self.assertEqual(self.widget.cb_prob.count(), 0)
4545
self.assertEqual(self.widget.groupvarview.count(), 0)
46+
47+
def test_discretize_meta(self):
48+
"""The widget discretizes continuous meta attributes"""
49+
domain = self.iris.domain
50+
mdomain = Domain(domain.attributes[:-1], domain.class_var,
51+
metas=domain.attributes[-1:])
52+
miris = Table(mdomain, self.iris)
53+
self.send_signal("Data", miris)
54+
widget = self.widget
55+
widget.disc_cont = True
56+
widget.varview.selectionModel().select(
57+
widget.varview.model().index(4, 0))
58+
self.assertIsInstance(widget.var, DiscreteVariable)
59+
self.assertEqual(widget.var.name, mdomain.metas[0].name)

0 commit comments

Comments
 (0)