1616import Orange .data
1717from Orange .data .filter import FilterDiscrete , FilterContinuous , Values
1818from Orange .statistics import contingency , distribution
19+ from Orange .statistics .contingency import Discrete
1920
2021from Orange .widgets import widget , gui
2122from Orange .widgets .settings import (Setting , DomainContextHandler ,
@@ -434,7 +435,9 @@ def compute_box_data(self):
434435 self .label_txts_all = label_texts
435436 else :
436437 self .label_txts_all = \
437- [v for v , c in zip (self .group_var .values , self .conts )
438+ [v for v , c in zip (
439+ self .group_var .values + ["Missing values" ],
440+ self .conts .array_with_unknowns )
438441 if np .sum (c ) > 0 ]
439442 else :
440443 self .dist = distribution .get_distribution (dataset , attr )
@@ -560,7 +563,8 @@ def _display_changed_disc(self):
560563 if self .group_var :
561564 self .labels = [
562565 QGraphicsTextItem ("{}" .format (int (sum (cont ))))
563- for cont in self .conts if np .sum (cont ) > 0 ]
566+ for cont in self .conts .array_with_unknowns
567+ if np .sum (cont ) > 0 ]
564568 else :
565569 self .labels = [
566570 QGraphicsTextItem (str (int (sum (self .dist ))))]
@@ -570,15 +574,18 @@ def _display_changed_disc(self):
570574 self .draw_axis_disc ()
571575 if self .group_var :
572576 self .boxes = \
573- [self .strudel (cont , i ) for i , cont in enumerate (self .conts )
577+ [self .strudel (cont , i )
578+ for i , cont in enumerate (self .conts .array_with_unknowns )
574579 if np .sum (cont ) > 0 ]
575580 self .conts = self .conts [np .sum (np .array (self .conts ), axis = 1 ) > 0 ]
576581
577582 if self .sort_freqs :
578583 # pylint: disable=invalid-unary-operand-type
579- self .order = sorted (self .order , key = (- np .sum (self .conts , axis = 1 )).__getitem__ )
584+ self .order = sorted (
585+ self .order , key = (- np .sum (
586+ self .conts .array_with_unknowns , axis = 1 )).__getitem__ )
580587 else :
581- self .boxes = [self .strudel (self .dist )]
588+ self .boxes = [self .strudel (self .dist , self . dist . unknowns )]
582589
583590 for row , box_index in enumerate (self .order ):
584591 y = (- len (self .boxes ) + row ) * 40 + 10
@@ -626,7 +633,7 @@ def __draw_row_counts(self, y, row):
626633 label = self .labels [row ]
627634 b = label .boundingRect ()
628635 if self .group_var :
629- right = self .scale_x * sum (self .conts [row ])
636+ right = self .scale_x * sum (self .conts . array_with_unknowns [row ])
630637 else :
631638 right = self .scale_x * sum (self .dist )
632639 label .setPos (right + 10 , y - b .height () / 2 )
@@ -995,6 +1002,8 @@ def strudel(self, dist, group_val_index=None):
9951002 cond .append (FilterDiscrete (self .group_var , [group_val_index ]))
9961003 box .append (FilterGraphicsRectItem (cond , 0 , - 10 , 1 , 10 ))
9971004 cum = 0
1005+ values = attr .values + ["Missing values" ]
1006+ colors = np .vstack ((attr .colors , [128 , 128 , 128 ]))
9981007 for i , v in enumerate (dist ):
9991008 if v < 1e-6 :
10001009 continue
@@ -1005,15 +1014,16 @@ def strudel(self, dist, group_val_index=None):
10051014 if group_val_index is not None :
10061015 cond .append (FilterDiscrete (self .group_var , [group_val_index ]))
10071016 rect = FilterGraphicsRectItem (cond , cum + 1 , - 6 , v - 2 , 12 )
1008- rect .setBrush (QBrush (QColor (* attr . colors [i ])))
1017+ rect .setBrush (QBrush (QColor (* colors [i ])))
10091018 rect .setPen (QPen (Qt .NoPen ))
10101019 if self .stretched :
1011- tooltip = "{}: {:.2f}%" .format (attr .values [i ],
1012- 100 * dist [i ] / sum (dist ))
1020+ tooltip = "{}: {:.2f}%" .format (
1021+ values [i ],
1022+ 100 * dist [i ] / sum (dist ))
10131023 else :
1014- tooltip = "{}: {}" .format (attr . values [i ], int (dist [i ]))
1024+ tooltip = "{}: {}" .format (values [i ], int (dist [i ]))
10151025 rect .setToolTip (tooltip )
1016- text = QGraphicsTextItem (attr . values [i ])
1026+ text = QGraphicsTextItem (values [i ])
10171027 box .append (rect )
10181028 box .append (text )
10191029 cum += v
0 commit comments