projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 'master' into 'psppsheet'.
[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 d000a1ac21e26f2961e80b6ced90c94932ee94ff..a9a5d44f58b475aef164f8fe9077008d4264ece8 100644
(file)
--- a/
src/output/charts/plot-hist-cairo.c
+++ b/
src/output/charts/plot-hist-cairo.c
@@
-33,12
+33,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
+47,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
+56,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
+67,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
+101,9
@@
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", (upper + lower) / 2.0);
}
void
}
void
@@
-123,7
+130,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
+150,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);