bug #62189: Fixed clipped numbers in histogram legend
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Fri, 18 Mar 2022 23:11:05 +0000 (00:11 +0100)
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>
Fri, 18 Mar 2022 23:11:05 +0000 (00:11 +0100)
I modified the legend rendering to avoid the clipping of mean and
standard deviation in the legend of the histogram plot. In addition
I changed the number print format to also show reasonable numbers
for small values.

fixed: https://savannah.gnu.org/bugs/index.php?62198

src/output/charts/plot-hist-cairo.c

index f8663428096ff06e434d24f3d0976b880cdf57b0..c8f604af695e8d48c1b408de4e987da83e276b7f 100644 (file)
@@ -35,30 +35,40 @@ static void
 histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
                         double n, double mean, double stddev)
 {
-  double y = geom->axis[SCALE_ORDINATE].data_min;
+  double y = geom->axis[SCALE_ORDINATE].data_max - geom->font_size;
   cairo_save (cr);
 
-  if (n != SYSMIS)
+  if (mean != SYSMIS)
     {
-      char *buf = xasprintf (_("N = %.2f"), n);
-      cairo_move_to (cr, geom->legend_left, y);
+      char *buf = xasprintf (_("Mean"));
+      cairo_move_to (cr,geom->legend_left, y);
       xrchart_label (cr, 'l', 'b', geom->font_size, buf);
-      y += geom->font_size * 1.5;
+      y -= geom->font_size * 1.5;
+      free (buf);
+      buf = xasprintf ("%g", mean);
+      cairo_move_to (cr,geom->legend_left, y);
+      xrchart_label (cr, 'l', 'b', geom->font_size, buf);
+      y -= geom->font_size * 2.0;
       free (buf);
     }
 
-  if (mean != SYSMIS)
+  if (stddev != SYSMIS)
     {
-      char *buf = xasprintf (_("Mean = %.1f"), mean);
-      cairo_move_to (cr,geom->legend_left, y);
+      char *buf = xasprintf (_("Std Dev"));
+      cairo_move_to (cr, geom->legend_left, y);
+      xrchart_label (cr, 'l', 'b', geom->font_size, buf);
+      free (buf);
+      y -= geom->font_size * 1.5;
+      buf = xasprintf ("%g", stddev);
+      cairo_move_to (cr, geom->legend_left, y);
       xrchart_label (cr, 'l', 'b', geom->font_size, buf);
-      y += geom->font_size * 1.5;
       free (buf);
+      y -= geom->font_size * 2.0;
     }
 
-  if (stddev != SYSMIS)
+  if (n != SYSMIS)
     {
-      char *buf = xasprintf (_("Std. Dev = %.2f"), stddev);
+      char *buf = xasprintf (_("N = %.0f"), n);
       cairo_move_to (cr, geom->legend_left, y);
       xrchart_label (cr, 'l', 'b', geom->font_size, buf);
       free (buf);