Skip to content

Commit dec74fb

Browse files
authored
Merge pull request #3358 from VesnaT/fix_owfreeviz
[FIX]OWFreeViz: Fix optimization for data with missing values
2 parents 1fe7a11 + 3e2bd8d commit dec74fb

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

Orange/widgets/visualize/owfreeviz.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -353,12 +353,12 @@ def prepare_projection_data(self):
353353
self._X = self._Y = self.valid_data = None
354354
return
355355

356-
self._X = self.data.X.copy()
357-
self._X -= np.nanmean(self._X, axis=0)
358-
span = np.ptp(self._X[self.valid_data], axis=0)
356+
self._X = self.data.X[self.valid_data]
357+
self._X -= np.mean(self._X, axis=0)
358+
span = np.ptp(self._X, axis=0)
359359
self._X[:, span > 0] /= span[span > 0].reshape(1, -1)
360360

361-
self._Y = self.data.Y
361+
self._Y = self.data.Y[self.valid_data]
362362
if self.data.domain.class_var.is_discrete:
363363
self._Y = self._Y.astype(int)
364364

@@ -370,9 +370,10 @@ def init_embedding_coords(self):
370370
def get_embedding(self):
371371
if self.data is None:
372372
return None
373-
embedding = np.dot(self._X, self.projection)
374-
embedding /= \
375-
np.max(np.linalg.norm(embedding[self.valid_data], axis=1)) or 1
373+
EX = np.dot(self._X, self.projection)
374+
EX /= np.max(np.linalg.norm(EX, axis=1)) or 1
375+
embedding = np.zeros((len(self.data), 2), dtype=np.float)
376+
embedding[self.valid_data] = EX
376377
return embedding
377378

378379
def get_anchors(self):

Orange/widgets/visualize/tests/test_owfreeviz.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def test_error_msg(self):
3939
self.assertFalse(self.widget.Error.not_enough_class_vars.is_shown())
4040

4141
def test_optimization(self):
42-
self.send_signal(self.widget.Inputs.data, self.data)
42+
self.send_signal(self.widget.Inputs.data, self.heart_disease)
4343
self.widget.btn_start.click()
4444

4545
def test_optimization_cancelled(self):

Orange/widgets/visualize/utils/widget.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ def clear(self):
550550
self.data = None
551551
self.valid_data = None
552552
self.selection = None
553+
self.graph.selection = None
553554

554555
def onDeleteWidget(self):
555556
super().onDeleteWidget()

0 commit comments

Comments
 (0)