projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Annotate some more results as p-values and update the tests accordingly
[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 a70fa174fa7b72511856e67b359a18c12ece6d99..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 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
@@
-16,12
+16,13
@@
#include <config.h>
#include <config.h>
-#include
<output/charts/plot-hist.h>
+#include
"output/charts/plot-hist.h"
+#include <float.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_randist.h>
-#include
<data/val-type.h>
-#include
<output/cairo-chart.h>
+#include
"data/val-type.h"
+#include
"output/cairo-chart.h"
#include "gl/xvasprintf.h"
#include "gl/xvasprintf.h"
@@
-33,12
+34,12
@@
static void
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
double n, double mean, double stddev)
{
histogram_write_legend (cairo_t *cr, const struct xrchart_geometry *geom,
double n, double mean, double stddev)
{
- double y = geom->
data_bottom
;
+ double y = geom->
axis[SCALE_ORDINATE].data_min
;
cairo_save (cr);
if (n != SYSMIS)
{
cairo_save (cr);
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,24
+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->data_right - geom->data_left) * bar / (double) bins ;
- const double width = (geom->data_right - geom->data_left) / (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->data_top - geom->data_bottom) / gsl_histogram_max_val (h);
+ height = geom->axis[SCALE_ORDINATE].scale * gsl_histogram_get (h, bar);
- cairo_rectangle (cr, geom->data_left + x_pos, geom->data_bottom,
+ 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,
@@
-95,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, TICK_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
@@
-123,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);
@@
-141,20
+152,20
@@
xrchart_draw_histogram (const struct chart_item *chart_item, cairo_t *cr,
range = not_used - x_min;
gsl_histogram_get_range (h->gsl_hist, bins - 1, ¬_used, &x_max);
range = not_used - x_min;
gsl_histogram_get_range (h->gsl_hist, bins - 1, ¬_used, &x_max);
- abscissa_scale = (geom->
data_right - geom->data_left
) / (x_max - x_min);
- ordinate_scale = (geom->
data_top - geom->data_bottom
) /
+ abscissa_scale = (geom->
axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min
) / (x_max - x_min);
+ ordinate_scale = (geom->
axis[SCALE_ORDINATE].data_max - geom->axis[SCALE_ORDINATE].data_min
) /
gsl_histogram_max_val (h->gsl_hist);
gsl_histogram_max_val (h->gsl_hist);
- cairo_move_to (cr, geom->
data_left, geom->data_bottom
);
- for (d = geom->
data_left
;
- d <= geom->
data_right
;
- d += (geom->
data_right - geom->data_left
) / 100.0)
+ cairo_move_to (cr, geom->
axis[SCALE_ABSCISSA].data_min, geom->axis[SCALE_ORDINATE].data_min
);
+ for (d = geom->
axis[SCALE_ABSCISSA].data_min
;
+ d <= geom->
axis[SCALE_ABSCISSA].data_max
;
+ d += (geom->
axis[SCALE_ABSCISSA].data_max - geom->axis[SCALE_ABSCISSA].data_min
) / 100.0)
{
{
- const double x = (d - geom->
data_left
) / abscissa_scale + x_min;
+ const double x = (d - geom->
axis[SCALE_ABSCISSA].data_min
) / abscissa_scale + x_min;
const double y = h->n * range *
gsl_ran_gaussian_pdf (x - h->mean, h->stddev);
const double y = h->n * range *
gsl_ran_gaussian_pdf (x - h->mean, h->stddev);
- cairo_line_to (cr, d, geom->
data_bottom
+ y * ordinate_scale);
+ cairo_line_to (cr, d, geom->
axis[SCALE_ORDINATE].data_min
+ y * ordinate_scale);
}
cairo_stroke (cr);
}
cairo_stroke (cr);