/* Creates and returns a chart that will render a barchart with
- the given TITLE and the N_CATS described in CATS.
+ the given TITLE and the N_CATS described in CATS.
- VAR is an array containing the categorical variables, and N_VAR
+ VAR is an array containing the categorical variables, and N_VAR
the number of them. N_VAR must be exactly 1 or 2.
CATS are the counts of the values of those variables. N_CATS is the
*/
struct chart_item *
barchart_create (const struct variable **var, int n_vars,
- const char *ylabel,
+ const char *ylabel, bool percent,
struct freq *const *cats, int n_cats)
{
struct barchart *bar;
assert (n_vars >= 1);
bar = xzalloc (sizeof *bar);
+ bar->percent = percent;
bar->var = var;
bar->n_vars = n_vars;
bar->n_nzcats = n_cats;
int idx = 0;
hmap_init (&bar->primaries);
- /*
+ /*
Iterate the categories and create a hash table of the primary categories.
We need to do this to find out how many there are and to cache the labels.
*/
}
}
- if (!flag)
+ if (!flag)
{
struct category *s = xzalloc (sizeof *s);
s->idx = idx++;
break;
}
}
-
- if (!flag)
+
+ if (!flag)
{
struct category *s = xzalloc (sizeof *s);
s->idx = idx++;
sort (bar->ss, n_category, sizeof *bar->ss,
compare_category_3way, bar);
}
-
+
/* Deep copy. Not necessary for cmd line, but essential for the GUI,
since an expose callback will access these structs which may not
struct hmap level2table;
hmap_init (&level2table);
int x = 0;
-
+
for (i = 0; i < n_cats; i++)
{
struct freq *c = cats[i];
if (0 == compare_freq_2level_ptr_3way (&foo, &c, bar))
{
foo->count += c->count;
-
+ bar->total_count += c->count;
+
if (foo->count > bar->largest)
bar->largest = foo->count;
-
+
flag = true;
break;
}
}
-
- if (!flag)
+
+ if (!flag)
{
- struct freq *aggregated_freq = freq_clone (c, n_vars, bar->widths);
+ struct freq *aggregated_freq = freq_clone (c, n_vars, bar->widths);
hmap_insert (&level2table, &aggregated_freq->node, hash);
-
+
if (c->count > bar->largest)
bar->largest = aggregated_freq->count;
-
+
+ bar->total_count += c->count;
bar->cats[x++] = aggregated_freq;
}
}
{
freq_destroy (bar->cats[i], bar->n_vars, bar->widths);
}
-
+
free (bar->cats);
free (bar->ylabel);
free (bar->ss);