iplotting time series - ploot - simple plotting tools Err bitreich.org 70
hgit clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot URL:git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot bitreich.org 70
1Log /scm/ploot/log.gph bitreich.org 70
1Files /scm/ploot/files.gph bitreich.org 70
1Refs /scm/ploot/refs.gph bitreich.org 70
1Tags /scm/ploot/tag bitreich.org 70
1README /scm/ploot/file/README.md.gph bitreich.org 70
1LICENSE /scm/ploot/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 51d676a1197f90fba3e657a875ad3905b95646a2 /scm/ploot/commit/51d676a1197f90fba3e657a875ad3905b95646a2.gph bitreich.org 70
1parent 413abf823787458e35396a700f9acf1af53ef239 /scm/ploot/commit/413abf823787458e35396a700f9acf1af53ef239.gph bitreich.org 70
hAuthor: Josuah Demangeon <mail@josuah.net> URL:mailto:mail@josuah.net bitreich.org 70
iDate: Tue, 6 Feb 2018 23:03:45 +0100 Err bitreich.org 70
i Err bitreich.org 70
iplotting time series Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M ploot.c | 77 +++++++++++++++++++++++-------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 59 insertions(+), 18 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/ploot.c b/ploot.c /scm/ploot/file/ploot.c.gph bitreich.org 70
i@@ -12,8 +12,8 @@ Err bitreich.org 70
i Err bitreich.org 70
i #define ABS(x) ((x) < 0 ? -(x) : (x)) Err bitreich.org 70
i #define MIN(x, y) ((x) < (y) ? (x) : (y)) Err bitreich.org 70
i-#define LEN(x) (sizeof(x) / sizeof(*x)) Err bitreich.org 70
i- Err bitreich.org 70
i+#define MAX(x, y) ((x) > (y) ? (x) : (y)) Err bitreich.org 70
i+#define LEN(buf) (sizeof(buf) / sizeof(*(buf))) Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
i * Add `val' at the current position `pos' of the `ring' buffer and set pos to Err bitreich.org 70
i@@ -37,6 +37,7 @@ do { \ Err bitreich.org 70
i Err bitreich.org 70
i int flag_h = 20; Err bitreich.org 70
i char *flag_t = NULL; Err bitreich.org 70
i+time_t flag_o = 0; Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
i * Set `str' to a human-readable form of `num' with always a width of 7 (+ 1 Err bitreich.org 70
i@@ -108,11 +109,13 @@ vaxis(double val, int pos) Err bitreich.org 70
i * Print horizontal axis for up to `col' values. Err bitreich.org 70
i */ Err bitreich.org 70
i void Err bitreich.org 70
i-haxis(int col) Err bitreich.org 70
i+haxis(double *beg, double *end) Err bitreich.org 70
i { Err bitreich.org 70
i+ double *tp; Err bitreich.org 70
i+ Err bitreich.org 70
i printf("%*d -+", MARGIN, 0); Err bitreich.org 70
i- while (col-- > 0) Err bitreich.org 70
i- putchar('-'); Err bitreich.org 70
i+ for (tp = beg; tp < end; tp++) Err bitreich.org 70
i+ putchar((*tp < 0) ? ('x') : ('-')); Err bitreich.org 70
i putchar('\n'); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -151,7 +154,7 @@ plot(int height, double *beg, double *end, char *str) Err bitreich.org 70
i vaxis(top, h); Err bitreich.org 70
i line(beg, end, top, bot); Err bitreich.org 70
i } Err bitreich.org 70
i- haxis(end - beg); Err bitreich.org 70
i+ haxis(beg, end); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
i@@ -169,7 +172,6 @@ read_simple(double buf[MAX_VAL]) Err bitreich.org 70
i for (p = pos = 0; scanf("%lf\n", &val) > 0; p++) Err bitreich.org 70
i RING_ADD(rbuf, len, pos, val); Err bitreich.org 70
i len = MIN(len, p); Err bitreich.org 70
i- pos = MIN(pos, p); Err bitreich.org 70
i Err bitreich.org 70
i RING_COPY(buf, rbuf, len, pos); Err bitreich.org 70
i Err bitreich.org 70
i@@ -182,43 +184,75 @@ read_simple(double buf[MAX_VAL]) Err bitreich.org 70
i * least MAX_VAL wide and return a pointer to the last element of `vbuf' or NULL if the Err bitreich.org 70
i * input contains error. Err bitreich.org 70
i */ Err bitreich.org 70
i-double * Err bitreich.org 70
i+time_t * Err bitreich.org 70
i read_time_series(double *vbuf, time_t *tbuf) Err bitreich.org 70
i { Err bitreich.org 70
i- size_t p, pos, len; Err bitreich.org 70
i+ size_t p, pos, nul, len; Err bitreich.org 70
i double vrbuf[MAX_VAL], vval; Err bitreich.org 70
i time_t trbuf[MAX_VAL], tval; Err bitreich.org 70
i Err bitreich.org 70
i len = LEN(vrbuf); Err bitreich.org 70
i- for (p = pos = 0; scanf("%zd %lf\n", &tval, &vval) > 0; p++) Err bitreich.org 70
i+ for (p = pos = 0; scanf("%zd %lf\n", &tval, &vval) > 0; p++) { Err bitreich.org 70
i RING_ADD(trbuf, len, pos, tval); Err bitreich.org 70
i- RING_ADD(vrbuf, len, pos, vval); Err bitreich.org 70
i+ RING_ADD(vrbuf, len, nul, vval); Err bitreich.org 70
i+ } Err bitreich.org 70
i len = MIN(len, p); Err bitreich.org 70
i- pos = MIN(pos, p); Err bitreich.org 70
i Err bitreich.org 70
i RING_COPY(tbuf, trbuf, len, pos); Err bitreich.org 70
i RING_COPY(vbuf, vrbuf, len, pos); Err bitreich.org 70
i Err bitreich.org 70
i+ return tbuf + len; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * Walk from `tbeg' and `tend' and add offset in `tbuf' every time there is no Err bitreich.org 70
i+ * value in `step' amount of time, by setting a value to -1. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+double * Err bitreich.org 70
i+fill_gaps(time_t *tbeg, time_t *tend, double *vbuf, time_t step) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ size_t p, pos, len; Err bitreich.org 70
i+ time_t *tp, toff; Err bitreich.org 70
i+ double *vp, vrbuf[MAX_VAL]; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Compute the average alignment of the timestamps values according to Err bitreich.org 70
i+ * the step size. */ Err bitreich.org 70
i+ toff = 0; Err bitreich.org 70
i+ for (tp = tbeg; tp < tend; tp++) Err bitreich.org 70
i+ toff += *tp % step; Err bitreich.org 70
i+ toff = *tbeg + toff / (tend - tbeg) + step / 2; Err bitreich.org 70
i+ Err bitreich.org 70
i+ /* Fill `vbuf' with gap added at each time gap using vrbuf as Err bitreich.org 70
i+ * intermediate ring buffer. */ Err bitreich.org 70
i+ len = LEN(vrbuf); Err bitreich.org 70
i+ for (p = pos = 0, tp = tbeg, vp = vbuf; tp < tend; p++, vp++, tp++) { Err bitreich.org 70
i+ for (; toff < *tp; toff += step) Err bitreich.org 70
i+ RING_ADD(vrbuf, len, pos, -1); Err bitreich.org 70
i+ RING_ADD(vrbuf, len, pos, *vp); Err bitreich.org 70
i+ toff += step; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ len = MAX(MIN(p, len), pos); Err bitreich.org 70
i+ Err bitreich.org 70
i+ RING_COPY(vbuf, vrbuf, len, pos); Err bitreich.org 70
i+ Err bitreich.org 70
i return vbuf + len; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i void Err bitreich.org 70
i usage(void) Err bitreich.org 70
i { Err bitreich.org 70
i- printf("usage: ploot [-h <height>] [-t <title>]\n"); Err bitreich.org 70
i+ printf("usage: ploot [-h <height>] [-t <title>] -o <offset>\n"); Err bitreich.org 70
i exit(1); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i int Err bitreich.org 70
i main(int argc, char **argv) Err bitreich.org 70
i { Err bitreich.org 70
i-/* Err bitreich.org 70
i- time_t tbuf[MAX_VAL]; Err bitreich.org 70
i-*/ Err bitreich.org 70
i+ time_t tbuf[MAX_VAL], *tend; Err bitreich.org 70
i double vbuf[MAX_VAL], *vend; Err bitreich.org 70
i char c; Err bitreich.org 70
i Err bitreich.org 70
i- while ((c = getopt(argc, argv, "h:t:")) != -1) { Err bitreich.org 70
i+ while ((c = getopt(argc, argv, "h:t:o:")) != -1) { Err bitreich.org 70
i switch (c) { Err bitreich.org 70
i case -1: Err bitreich.org 70
i break; Err bitreich.org 70
i@@ -229,12 +263,19 @@ main(int argc, char **argv) Err bitreich.org 70
i case 't': Err bitreich.org 70
i flag_t = optarg; Err bitreich.org 70
i break; Err bitreich.org 70
i+ case 'o': Err bitreich.org 70
i+ flag_o = atol(optarg); Err bitreich.org 70
i+ break; Err bitreich.org 70
i default: Err bitreich.org 70
i usage(); Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i+ if (flag_o == 0) Err bitreich.org 70
i+ usage(); Err bitreich.org 70
i+ Err bitreich.org 70
i+ tend = read_time_series(vbuf, tbuf); Err bitreich.org 70
i+ vend = fill_gaps(tbuf, tend, vbuf, flag_o); Err bitreich.org 70
i Err bitreich.org 70
i- vend = read_simple(vbuf); Err bitreich.org 70
i plot(flag_h, vbuf, vend, flag_t); Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain