projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix issue reported on macos where the toolbar icons were not displayed.
[pspp]
/
src
/
output
/
charts
/
plot-hist-cairo.c
diff --git
a/src/output/charts/plot-hist-cairo.c
b/src/output/charts/plot-hist-cairo.c
index 9ce4abb3ed09fec2796c25e4077e9520893116fc..93133c2e9e0acb46d93dab01a15f40fc8b234080 100644
(file)
--- a/
src/output/charts/plot-hist-cairo.c
+++ b/
src/output/charts/plot-hist-cairo.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2009, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2011
, 2014
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@
-18,6
+18,7
@@
#include "output/charts/plot-hist.h"
#include "output/charts/plot-hist.h"
+#include <float.h>
#include <gsl/gsl_randist.h>
#include "data/val-type.h"
#include <gsl/gsl_randist.h>
#include "data/val-type.h"
@@
-38,7
+39,7
@@
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
if (n != SYSMIS)
{
if (n != SYSMIS)
{
- char *buf = xasprintf (
"N = %.2f"
, n);
+ char *buf = xasprintf (
_("N = %.2f")
, n);
cairo_move_to (cr, geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
y += geom->font_size * 1.5;
cairo_move_to (cr, geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
y += geom->font_size * 1.5;
@@
-47,7
+48,7
@@
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
if (mean != SYSMIS)
{
if (mean != SYSMIS)
{
- char *buf = xasprintf (
"Mean = %.1f"
, mean);
+ char *buf = xasprintf (
_("Mean = %.1f")
, mean);
cairo_move_to (cr,geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
y += geom->font_size * 1.5;
cairo_move_to (cr,geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
y += geom->font_size * 1.5;
@@
-56,7
+57,7
@@
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
if (stddev != SYSMIS)
{
if (stddev != SYSMIS)
{
- char *buf = xasprintf (
"Std. Dev = %.2f"
, stddev);
+ char *buf = xasprintf (
_("Std. Dev = %.2f")
, stddev);
cairo_move_to (cr, geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
free (buf);
cairo_move_to (cr, geom->legend_left, y);
xrchart_label (cr, 'l', 'b', geom->font_size, buf);
free (buf);
@@
-67,25
+68,30
@@
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
static void
hist_draw_bar (cairo_t *cr, const struct xrchart_geometry *geom,
static void
hist_draw_bar (cairo_t *cr, const struct xrchart_geometry *geom,
- const gsl_histogram *h, int bar)
+ const gsl_histogram *h, int bar
, bool label
)
{
double upper;
double lower;
double height;
const size_t bins = gsl_histogram_bins (h);
{
double upper;
double lower;
double height;
const size_t bins = gsl_histogram_bins (h);
- const double x_pos = (geom->axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min) * bar / (double) bins ;
- const double width = (geom->axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min) / (double) bins ;
+
+ const double x_pos =
+ (geom->axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min) *
+ bar / (double) bins ;
+
+ const double width =
+ (geom->axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min) / (double) bins ;
assert ( 0 == gsl_histogram_get_range (h, bar, &lower, &upper));
assert ( upper >= lower);
assert ( 0 == gsl_histogram_get_range (h, bar, &lower, &upper));
assert ( upper >= lower);
- height = gsl_histogram_get (h, bar) /
- (geom->axis[SCALE_ORDINATE].max - geom->axis[SCALE_ORDINATE].min) *
- (geom->axis[SCALE_ORDINATE].data_max - geom->axis[SCALE_ORDINATE].data_min);
+ height = geom->axis[SCALE_ORDINATE].scale * gsl_histogram_get (h, bar);
- cairo_rectangle (cr, geom->axis[SCALE_ABSCISSA].data_min + x_pos, geom->axis[SCALE_ORDINATE].data_min,
+ cairo_rectangle (cr,
+ geom->axis[SCALE_ABSCISSA].data_min + x_pos,
+ geom->axis[SCALE_ORDINATE].data_min,
width, height);
cairo_save (cr);
cairo_set_source_rgb (cr,
width, height);
cairo_save (cr);
cairo_set_source_rgb (cr,
@@
-96,8
+102,10
@@
hist_draw_bar (cairo_t *cr, const struct xrchart_geometry *geom,
cairo_restore (cr);
cairo_stroke (cr);
cairo_restore (cr);
cairo_stroke (cr);
- draw_tick (cr, geom, SCALE_ABSCISSA,
- x_pos + width / 2.0, "%g", (upper + lower) / 2.0);
+ if (label)
+ draw_tick (cr, geom, SCALE_ABSCISSA, bins > 10,
+ x_pos + width / 2.0, "%.*g",
+ DBL_DIG + 1, (upper + lower) / 2.0);
}
void
}
void
@@
-124,7
+132,9
@@
xrchart_draw_histogram (const struct chart_item *chart_item, cairo_t *cr,
xrchart_write_yscale (cr, geom, 0, gsl_histogram_max_val (h->gsl_hist), 5);
for (i = 0; i < bins; i++)
xrchart_write_yscale (cr, geom, 0, gsl_histogram_max_val (h->gsl_hist), 5);
for (i = 0; i < bins; i++)
- hist_draw_bar (cr, geom, h->gsl_hist, i);
+ {
+ hist_draw_bar (cr, geom, h->gsl_hist, i, true);
+ }
histogram_write_legend (cr, geom, h->n, h->mean, h->stddev);
histogram_write_legend (cr, geom, h->n, h->mean, h->stddev);