From 67926de45c5d116f4c29348d755334fe6bdefd95 Mon Sep 17 00:00:00 2001 From: Dimitri Lozeve Date: Thu, 29 Apr 2021 22:32:35 +0200 Subject: [PATCH] Add legend --- demo.png | Bin 23770 -> 24292 bytes demo.ss | 7 +++++-- uniplot/lineplot.ss | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/demo.png b/demo.png index 431681c6ae7c6592556fdc99d94ca739a0d59ac1..8a71543f53a8e6b48f78e2bee5c340a142bbf79f 100644 GIT binary patch literal 24292 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 diff --git a/demo.ss b/demo.ss index 1a2004a..6cb5a8d 100755 --- a/demo.ss +++ b/demo.ss @@ -2,7 +2,8 @@ (export main) -(import :std/misc/string +(import :std/format + :std/misc/string :dlozeve/fancy/format :dlozeve/uniplot/lineplot) @@ -11,4 +12,6 @@ (ys1 (map cos xs)) (ys2 (map (lambda (x) (/ 1 (+ 0.5 x))) xs)) (ys3 (map (lambda (x) (sin (* 2 x))) xs))) - (displayln (line-plot [xs ys1 ys2 ys3] xlabel: "time")))) + (displayln (line-plot [xs ys1 ys2 ys3] + xlabel: "time" + names: ["cos(time)" "1 / (time + 0.5)" "sin(2 × time)"])))) diff --git a/uniplot/lineplot.ss b/uniplot/lineplot.ss index a0ee8d1..3a0462d 100644 --- a/uniplot/lineplot.ss +++ b/uniplot/lineplot.ss @@ -4,8 +4,8 @@ :std/iter :std/misc/list :std/misc/string - :dlozeve/uniplot/braille - :dlozeve/fancy/format) + :dlozeve/fancy/format + :dlozeve/uniplot/braille) (def +default-colors+ '(green blue red yellow cyan magenta white)) @@ -22,8 +22,8 @@ canvas) (def (line-plot lsts (colors +default-colors+) - width: (width 160) height: (height 80) borders: (borders #t) - xlabel: (xlabel #f)) + width: (width 160) height: (height 80) + xlabel: (xlabel "") names: (names [])) (define-values (xmin xmax ymin ymax canvases) (match lsts ([ys] (let ((xmin 0) @@ -57,14 +57,25 @@ width: width height: height))))))) (def canvases-str (canvases->string canvases colors)) (def hor-size (u8vector-length (vector-ref (car canvases) 0))) - (def plot (if borders - (str - (format " ┌─~a─┐\n~5,1F ┤ " (make-string hor-size #\─) ymax) - (string-subst canvases-str "\n" " │\n │ ") - (format " │\n~5,1F ┤~a │\n" ymin (make-string (+ 1 hor-size) #\ )) - (format " └─┬~a┬─┘\n" (make-string (- hor-size 2) #\─)) - (format "\n ~5,1F~a~5,1F\n" xmin (make-string (- hor-size 6) #\ ) xmax)) - canvases-str)) - (if xlabel - (str plot (make-string (quotient hor-size 2) #\ ) xlabel "\n") - plot)) + (def vert-size (vector-length (car canvases))) + (def plot (str + (format " ┌─~a─┐\n~5,1F ┤ " (make-string hor-size #\─) ymax) + (string-subst canvases-str "\n" " │\n │ ") + (format " │\n~5,1F ┤~a │\n" ymin (make-string (+ 1 hor-size) #\ )) + (format " └─┬~a┬─┘\n" (make-string (- hor-size 2) #\─)) + (format "\n ~5,1F~a~5,1F\n" xmin (make-string (- hor-size 6) #\ ) xmax))) + (def plot-with-legend (if (null? names) + plot + (str plot + (cursor-up (+ 4 vert-size)) + (cursor-forward (+ 12 hor-size)) + (apply str + (for/collect ((name names) (color colors)) + (str (graphics-style [color]) name (graphics-style) + (cursor-down 1) + (cursor-back (string-length name))))) + (cursor-down (- (+ 4 vert-size) (length names))) + (cursor-back (+ 12 hor-size))))) + (if (string-empty? xlabel) + plot-with-legend + (str plot-with-legend (make-string (quotient hor-size 2) #\ ) xlabel "\n")))