Support NaN values
This commit is contained in:
parent
4ff1f01e5c
commit
5c8e3c9234
1 changed files with 17 additions and 11 deletions
|
@ -12,12 +12,18 @@
|
||||||
|
|
||||||
(def +default-colors+ '(green blue red yellow cyan magenta white))
|
(def +default-colors+ '(green blue red yellow cyan magenta white))
|
||||||
|
|
||||||
|
(def (nanmin . rest)
|
||||||
|
(apply min (filter finite? rest)))
|
||||||
|
|
||||||
|
(def (nanmax . rest)
|
||||||
|
(apply max (filter finite? rest)))
|
||||||
|
|
||||||
(def (scale-fn lo hi)
|
(def (scale-fn lo hi)
|
||||||
(lambda (x) (/ (- x lo) (- hi lo))))
|
(lambda (x) (/ (- x lo) (- hi lo))))
|
||||||
|
|
||||||
(def (draw-canvas xs ys x-scale-fn y-scale-fn width: (width 160) height: (height 80))
|
(def (draw-canvas xs ys x-scale-fn y-scale-fn width: (width 160) height: (height 80))
|
||||||
(def canvas (make-braille-canvas (1+ height) (1+ width)))
|
(def canvas (make-braille-canvas (1+ height) (1+ width)))
|
||||||
(for ((x xs) (y ys))
|
(for ((x xs) (y ys) when (and (finite? x) (finite? y)))
|
||||||
(braille-canvas-set! canvas
|
(braille-canvas-set! canvas
|
||||||
(inexact->exact (floor (* height (y-scale-fn y))))
|
(inexact->exact (floor (* height (y-scale-fn y))))
|
||||||
(inexact->exact (floor (* width (x-scale-fn x))))
|
(inexact->exact (floor (* width (x-scale-fn x))))
|
||||||
|
@ -65,27 +71,27 @@
|
||||||
(match lsts
|
(match lsts
|
||||||
([ys] (let ((xmin 0)
|
([ys] (let ((xmin 0)
|
||||||
(xmax (length ys))
|
(xmax (length ys))
|
||||||
(ymin (apply min ys))
|
(ymin (apply nanmin ys))
|
||||||
(ymax (apply max ys)))
|
(ymax (apply nanmax ys)))
|
||||||
(values xmin xmax ymin ymax
|
(values xmin xmax ymin ymax
|
||||||
[(draw-canvas (iota (length ys)) ys
|
[(draw-canvas (iota (length ys)) ys
|
||||||
(scale-fn xmin xmax)
|
(scale-fn xmin xmax)
|
||||||
(scale-fn ymin ymax)
|
(scale-fn ymin ymax)
|
||||||
width: width height: height)])))
|
width: width height: height)])))
|
||||||
([xs ys] (let ((xmin (apply min xs))
|
([xs ys] (let ((xmin (apply nanmin xs))
|
||||||
(xmax (apply max xs))
|
(xmax (apply nanmax xs))
|
||||||
(ymin (apply min ys))
|
(ymin (apply nanmin ys))
|
||||||
(ymax (apply max ys)))
|
(ymax (apply nanmax ys)))
|
||||||
(values xmin xmax ymin ymax
|
(values xmin xmax ymin ymax
|
||||||
[(draw-canvas xs ys
|
[(draw-canvas xs ys
|
||||||
(scale-fn xmin xmax)
|
(scale-fn xmin xmax)
|
||||||
(scale-fn ymin ymax)
|
(scale-fn ymin ymax)
|
||||||
width: width height: height)])))
|
width: width height: height)])))
|
||||||
([xs . yss] (let* ((xmin (apply min xs))
|
([xs . yss] (let* ((xmin (apply nanmin xs))
|
||||||
(xmax (apply max xs))
|
(xmax (apply nanmax xs))
|
||||||
(all-ys (flatten yss))
|
(all-ys (flatten yss))
|
||||||
(ymin (apply min all-ys))
|
(ymin (apply nanmin all-ys))
|
||||||
(ymax (apply max all-ys))
|
(ymax (apply nanmax all-ys))
|
||||||
(x-scale-fn (scale-fn xmin xmax))
|
(x-scale-fn (scale-fn xmin xmax))
|
||||||
(y-scale-fn (scale-fn ymin ymax)))
|
(y-scale-fn (scale-fn ymin ymax)))
|
||||||
(values xmin xmax ymin ymax
|
(values xmin xmax ymin ymax
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue