diff --git a/Orange/widgets/visualize/owboxplot.py b/Orange/widgets/visualize/owboxplot.py
index b48b6da504d..643255e9f72 100644
--- a/Orange/widgets/visualize/owboxplot.py
+++ b/Orange/widgets/visualize/owboxplot.py
@@ -270,8 +270,8 @@ def __init__(self):
self.mainArea.layout().addWidget(self.box_view)
- e = gui.hBox(self.mainArea, addSpace=False)
- self.infot1 = gui.widgetLabel(e, "
No test results.")
+ gui.hBox(self.mainArea, addSpace=False)
+ self.stat_test = ""
self.mainArea.setMinimumWidth(300)
self.stats = self.dist = self.conts = []
@@ -380,7 +380,7 @@ def compute_score(attr):
def reset_all_data(self):
self.clear_scene()
- self.infot1.setText("")
+ self.stat_test = ""
self.attrs.clear()
self.group_vars.set_domain(None)
self.group_view.setEnabled(False)
@@ -494,6 +494,7 @@ def layout_changed(self):
for it in chain(self.labels, self.attr_labels):
self.box_scene.addItem(it)
self.display_changed()
+ self.draw_stat()
def display_changed(self):
if self.dataset is None:
@@ -597,7 +598,7 @@ def display_changed_disc(self):
self.box_scene.setSceneRect(-self.label_width - 5,
-30 - len(self.boxes) * 40,
self.scene_width, len(self.boxes * 40) + 90)
- self.infot1.setText("")
+ self.stat_test = ""
self.select_box_items()
def __draw_group_labels(self, y, row):
@@ -712,6 +713,7 @@ def stat_ANOVA():
p = 1 - scipy.special.fdtr(df_between, df_within, F)
return F, p
+ n = len(self.dataset)
if self.compare == OWBoxPlot.CompareNone or len(self.stats) < 2:
t = ""
elif any(s.n <= 1 for s in self.stats):
@@ -725,7 +727,7 @@ def stat_ANOVA():
# t = "Mann-Whitney's z: %.1f (p=%.3f)" % (z, p)
else:
t, p = stat_ttest()
- t = "" if np.isnan(t) else f"Student's t: {t:.3f} (p={p:.3f})"
+ t = "" if np.isnan(t) else f"Student's t: {t:.3f} (p={p:.3f}, N={n})"
else:
if self.compare == OWBoxPlot.CompareMedians:
t = ""
@@ -733,8 +735,8 @@ def stat_ANOVA():
# t = "Kruskal Wallis's U: %.1f (p=%.3f)" % (U, p)
else:
F, p = stat_ANOVA()
- t = "" if np.isnan(F) else f"ANOVA: {F:.3f} (p={p:.3f})"
- self.infot1.setText("%s" % t)
+ t = "" if np.isnan(F) else f"ANOVA: {F:.3f} (p={p:.3f}, N={n})"
+ self.stat_test = t
def mean_label(self, stat, attr, val_name):
label = QGraphicsItemGroup()
@@ -802,7 +804,7 @@ def draw_axis(self):
t = QGraphicsSimpleTextItem(
self.attribute.str_val(val) if not misssing_stats else "?")
t.setFont(self._axis_font)
- t.setFlags(t.flags() | QGraphicsItem.ItemIgnoresTransformations)
+ t.setFlag(QGraphicsItem.ItemIgnoresTransformations)
r = t.boundingRect()
x_start = val * scale_x - r.width() / 2
x_finish = x_start + r.width()
@@ -816,6 +818,14 @@ def draw_axis(self):
self.box_scene.addLine(
bottom * scale_x - 4, 0, top * scale_x + 4, 0, self._pen_axis)
+ def draw_stat(self):
+ if self.stat_test:
+ label = QGraphicsSimpleTextItem(self.stat_test)
+ label.setPos((self.scene_min_x + self.scene_max_x)/2 - label.boundingRect().width()/2,
+ 8 + self._axis_font.pixelSize()*2)
+ label.setFlag(QGraphicsItem.ItemIgnoresTransformations)
+ self.box_scene.addItem(label)
+
def draw_axis_disc(self):
"""
Draw the horizontal axis and sets self.scale_x for discrete attributes
@@ -1041,8 +1051,7 @@ def line(y0, y1):
x *= self.scale_x
xs.append(x * self.scale_x)
by = y_up + pos * height
- line(by + 12, 3)
- line(by - 12, by - 25)
+ line(by + 12, 0)
used_to = []
last_to = to = 0