projects
/
pspp
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7ddd4ae
)
Histograms: Rotate labels when there are lots of bins
author
John Darrington
<john@darrington.wattle.id.au>
Wed, 9 May 2012 09:11:50 +0000
(11:11 +0200)
committer
John Darrington
<john@darrington.wattle.id.au>
Wed, 9 May 2012 14:23:37 +0000
(16:23 +0200)
src/output/cairo-chart.c
patch
|
blob
|
history
src/output/cairo-chart.h
patch
|
blob
|
history
src/output/charts/boxplot-cairo.c
patch
|
blob
|
history
src/output/charts/plot-hist-cairo.c
patch
|
blob
|
history
diff --git
a/src/output/cairo-chart.c
b/src/output/cairo-chart.c
index 56b35290a6572a2098620cf12a4fd8270843f709..78f5fabab7249ae2fdfff448be9891f120cb40f1 100644
(file)
--- a/
src/output/cairo-chart.c
+++ b/
src/output/cairo-chart.c
@@
-151,8
+151,8
@@
xrchart_draw_marker (cairo_t *cr, double x, double y,
}
void
}
void
-xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
-
double font_size, const char *string
)
+xrchart_label
_rotate
(cairo_t *cr, int horz_justify, int vert_justify,
+
double font_size, const char *string, double angle
)
{
PangoFontDescription *desc;
PangoLayout *layout;
{
PangoFontDescription *desc;
PangoLayout *layout;
@@
-167,6
+167,7
@@
xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
pango_font_description_set_absolute_size (desc, font_size * PANGO_SCALE);
cairo_save (cr);
pango_font_description_set_absolute_size (desc, font_size * PANGO_SCALE);
cairo_save (cr);
+ cairo_rotate (cr, angle);
cairo_get_current_point (cr, &x, &y);
cairo_translate (cr, x, y);
cairo_move_to (cr, 0, 0);
cairo_get_current_point (cr, &x, &y);
cairo_translate (cr, x, y);
cairo_move_to (cr, 0, 0);
@@
-215,18
+216,28
@@
xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
pango_font_description_free (desc);
}
pango_font_description_free (desc);
}
+void
+xrchart_label (cairo_t *cr, int horz_justify, int vert_justify,
+ double font_size, const char *string)
+{
+ xrchart_label_rotate (cr, horz_justify, vert_justify, font_size, string, 0);
+}
+
+
/* Draw a tick mark at position
If label is non null, then print it at the tick mark
*/
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
/* Draw a tick mark at position
If label is non null, then print it at the tick mark
*/
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *s);
void
draw_tick (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
double position,
const char *s);
void
draw_tick (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *label, ...)
{
double position,
const char *label, ...)
{
@@
-238,7
+249,7
@@
draw_tick (cairo_t *cr, const struct xrchart_geometry *geom,
if (fabs (position) < DBL_EPSILON)
position = 0;
if (fabs (position) < DBL_EPSILON)
position = 0;
- draw_tick_internal (cr, geom, orientation, position, s);
+ draw_tick_internal (cr, geom, orientation,
rotated,
position, s);
free (s);
va_end (ap);
}
free (s);
va_end (ap);
}
@@
-247,6
+258,7
@@
draw_tick (cairo_t *cr, const struct xrchart_geometry *geom,
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
static void
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
enum tick_orientation orientation,
+ bool rotated,
double position,
const char *s)
{
double position,
const char *s)
{
@@
-276,7
+288,12
@@
draw_tick_internal (cairo_t *cr, const struct xrchart_geometry *geom,
cairo_move_to (cr, x, y);
if (orientation == SCALE_ABSCISSA)
cairo_move_to (cr, x, y);
if (orientation == SCALE_ABSCISSA)
- xrchart_label (cr, 'c', 't', geom->font_size, s);
+ {
+ if ( rotated)
+ xrchart_label_rotate (cr, 'l', 'c', geom->font_size, s, -G_PI_4);
+ else
+ xrchart_label (cr, 'c', 't', geom->font_size, s);
+ }
else if (orientation == SCALE_ORDINATE)
{
if (fabs (position) < DBL_EPSILON)
else if (orientation == SCALE_ORDINATE)
{
if (fabs (position) < DBL_EPSILON)
@@
-330,7
+347,7
@@
xrchart_write_scale (cairo_t *cr, struct xrchart_geometry *geom,
for (s = 0 ; s < upper - lower; ++s)
{
double pos = (s + lower) * tick_interval;
for (s = 0 ; s < upper - lower; ++s)
{
double pos = (s + lower) * tick_interval;
- draw_tick (cr, geom, orient,
+ draw_tick (cr, geom, orient,
false,
s * tick_interval * geom->axis[orient].scale, "%g", pos);
}
}
s * tick_interval * geom->axis[orient].scale, "%g", pos);
}
}
diff --git
a/src/output/cairo-chart.h
b/src/output/cairo-chart.h
index f415d1b9152d24a0ec8ca9ead02824e138c05aa8..0864d7e0142e00b45c95b2cec86c5d9b74ddd95b 100644
(file)
--- a/
src/output/cairo-chart.h
+++ b/
src/output/cairo-chart.h
@@
-96,13
+96,19
@@
void xrchart_draw_marker (cairo_t *, double x, double y, enum xrmarker_type,
void xrchart_label (cairo_t *, int horz_justify, int vert_justify,
double font_size, const char *);
void xrchart_label (cairo_t *, int horz_justify, int vert_justify,
double font_size, const char *);
+void xrchart_label_rotate (cairo_t *cr, int horz_justify, int vert_justify,
+ double font_size, const char *string, double angle);
+
+
/* Draw a tick mark at position
If label is non zero, then print it at the tick mark
*/
void draw_tick (cairo_t *, const struct xrchart_geometry *,
/* Draw a tick mark at position
If label is non zero, then print it at the tick mark
*/
void draw_tick (cairo_t *, const struct xrchart_geometry *,
- enum tick_orientation orientation, double position,
+ enum tick_orientation orientation,
+ bool rotated,
+ double position,
const char *label, ...)
const char *label, ...)
- PRINTF_FORMAT (
5, 6
);
+ PRINTF_FORMAT (
6, 7
);
/* Write the title on a chart*/
/* Write the title on a chart*/
diff --git
a/src/output/charts/boxplot-cairo.c
b/src/output/charts/boxplot-cairo.c
index dfc8399d4618ac8088c2c7d4a533a9d627621b19..946b7d443c7e8abfa1008c136aebd734857a7d0a 100644
(file)
--- a/
src/output/charts/boxplot-cairo.c
+++ b/
src/output/charts/boxplot-cairo.c
@@
-131,7
+131,8
@@
boxplot_draw_box (cairo_t *cr, const struct xrchart_geometry *geom,
}
/* Draw tick mark on x axis */
}
/* Draw tick mark on x axis */
- draw_tick(cr, geom, SCALE_ABSCISSA, box_centre - geom->axis[SCALE_ABSCISSA].data_min, "%s", name);
+ draw_tick (cr, geom, SCALE_ABSCISSA, false,
+ box_centre - geom->axis[SCALE_ABSCISSA].data_min, "%s", name);
}
void
}
void
diff --git
a/src/output/charts/plot-hist-cairo.c
b/src/output/charts/plot-hist-cairo.c
index 87409b1a90937bd76a62c668e033df74bbc80aea..a9a5d44f58b475aef164f8fe9077008d4264ece8 100644
(file)
--- a/
src/output/charts/plot-hist-cairo.c
+++ b/
src/output/charts/plot-hist-cairo.c
@@
-102,7
+102,7
@@
hist_draw_bar (cairo_t *cr, const struct xrchart_geometry *geom,
cairo_stroke (cr);
if (label)
cairo_stroke (cr);
if (label)
- draw_tick (cr, geom, SCALE_ABSCISSA,
+ draw_tick (cr, geom, SCALE_ABSCISSA,
bins > 10,
x_pos + width / 2.0, "%g", (upper + lower) / 2.0);
}
x_pos + width / 2.0, "%g", (upper + lower) / 2.0);
}