Introduction
Introduction Statistics Contact Development Disclaimer Help
tscale.c - ploot - simple plotting tools
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65…
Log
Files
Refs
Tags
README
---
tscale.c (1980B)
---
1 #include "scale.h"
2
3 #include <stddef.h>
4 #include <time.h>
5
6 #include "util.h"
7 #include "log.h"
8
9 /*
10 * - <max ^
11 * - | Translate the coordinates between double val…
12 * - <val szy and height in the plot of <row> rows.
13 * - |
14 * - <min v
15 */
16 int
17 scale_ypos(double val, double min, double max, int szy)
18 {
19 return szy * (val - min) / (max - min);
20 }
21
22 /*
23 * <---- szx ----> Translate the coordinates betwe…
24 * range and position in the plot of <col…
25 * t1 t t2
26 * | . . | . . |
27 */
28 int
29 scale_xpos(time_t t, time_t t1, time_t t2, int szx)
30 {
31 return szx * (t - t1) / (t2 - t1);
32 }
33
34 void
35 scale_minmax(struct csv *vl, int ncol,
36 time_t *tmin, time_t *tmax,
37 double *vmin, double *vmax)
38 {
39 double *v;
40 time_t *t;
41 size_t n;
42
43 *vmin = *vmax = 0;
44 *tmin = *tmax = *vl->t;
45
46 for (; ncol > 0; ncol--, vl++) {
47 for (t = vl->t, v = vl->v, n = vl->n; n > 0; t++, v++, n…
48 if (*v < *vmin) *vmin = *v;
49 if (*v > *vmax) *vmax = *v;
50 if (*t < *tmin) *tmin = *t;
51 if (*t > *tmax) *tmax = *t;
52 }
53 }
54
55 if (*tmin == *tmax)
56 die(1, "invalid time scale: min=%lld max=%lld", *tmin, *…
57 }
58
59 time_t
60 scale_tstep(time_t min, time_t max, int nval)
61 {
62 time_t dt, *sc, scale[] = {
63 1, 5, 2, 10, 20, 30, 60, 60*2, 60*5, 60*10, 60*20, 60*30…
64 3600*2, 3600*5, 3600*10, 3600*18, 3600*24, 3600*24*2,
65 3600*24*5, 3600*24*10, 3600*24*20, 3600*24*30, 3600*24*5…
66 3600*24*100, 3600*24*365, 0
67 };
68
69 dt = max - min;
70
71 for (sc = scale; *sc > 0; sc++)
72 if (dt < *sc * nval)
73 return *sc;
74 return dt / nval;
75 }
76
77 double
78 scale_vstep(double min, double max, int nval)
79 {
80 double dv, d, *sc, scale[] = { 1, 2, 3, 5 };
81
82 dv = max - min;
83
84 if (dv > 1)
85 for (d = 1; d != 0; d *= 10)
86 for (sc = scale; sc < scale + LEN(scale); sc++)
87 if (dv < *sc * d * nval)
88 return *sc * d;
89 if (dv < 1)
90 for (d = 1; d != 0; d *= 10)
91 for (sc = scale + LEN(scale) - 1; sc >= scale; s…
92 if (dv > *sc / d * nval / 2)
93 return *sc / d;
94 return 0;
95 }
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.