{
struct box_whisker *bw = UP_CAST (s, struct box_whisker, parent.parent);
bool extreme;
- struct outlier *o;
if (y > bw->hinges[2] + bw->step) /* Upper outlier */
{
/* y is an outlier */
- o = xzalloc (sizeof *o) ;
+ struct outlier *o = XZALLOC (struct outlier);
o->value = y;
o->extreme = extreme;
ds_init_empty (&o->label);
if (bw->id_var)
{
char *s = data_out (case_data_idx (cx, bw->id_idx),
- var_get_encoding (bw->id_var),
- var_get_print_format (bw->id_var));
+ var_get_encoding (bw->id_var),
+ var_get_print_format (bw->id_var),
+ settings_get_fmt_settings ());
ds_put_cstr (&o->label, s);
free (s);
{
ds_put_format (&o->label,
"%ld",
- (casenumber) case_data_idx (cx, bw->id_idx)->f);
+ (casenumber) case_num_idx (cx, bw->id_idx));
}
ll_push_head (&bw->outliers, &o->ll);
box_whisker_create (const struct tukey_hinges *th,
size_t id_idx, const struct variable *id_var)
{
- struct box_whisker *w = xzalloc (sizeof (*w));
- struct order_stats *os = &w->parent;
- struct statistic *stat = &os->parent;
-
- os->n_k = 0;
-
- stat->destroy = destroy;
- stat->accumulate = acc;
-
- tukey_hinges_calculate (th, w->hinges);
-
- w->id_idx = id_idx;
- w->id_var = id_var;
-
- w->step = (w->hinges[2] - w->hinges[0]) * 1.5;
-
- w->whiskers[1] = w->hinges[2];
- w->whiskers[0] = SYSMIS;
-
- ll_init (&w->outliers);
+ double hinges[3];
+ tukey_hinges_calculate (th, hinges);
+
+ struct box_whisker *w = xmalloc (sizeof *w);
+ *w = (struct box_whisker) {
+ .parent = {
+ .parent = {
+ .destroy = destroy,
+ },
+ .accumulate = acc,
+ },
+ .hinges = { hinges[0], hinges[1], hinges[2] },
+ .whiskers = { SYSMIS, hinges[2] },
+ .outliers = LL_INITIALIZER (w->outliers),
+ .step = (hinges[2] - hinges[0]) * 1.5,
+ .id_idx = id_idx,
+ .id_var = id_var,
+ };
return w;
}