racket/collects/plot/tests/tick-tests.rkt

245 lines
10 KiB
Racket

#lang racket
(require plot plot/utils)
(plot-font-family 'swiss)
(define (get-isosurface-ticks z-min z-max)
(cond [(z-min . >= . z-max) empty]
[else
(map pre-tick-value
(filter pre-tick-major?
(contour-ticks (plot-d-ticks) z-min z-max 'auto #f)))]))
;; try to verify that we always get 3-5 isosurfaces from the isosurfaces3d renderer
(time
(plot (function (λ (x)
(let ([ts (get-isosurface-ticks 1/10 (+ 1/10 x))])
(if (empty? ts) +nan.0 (length ts))))
#:samples 10000)
#:x-min 0 #:x-max 10
#:x-label "bounds size (min = 1/10)"
#:y-label "number of ticks"))
;; try to verify that we always get 3-5 isosurfaces from the isosurfaces3d renderer
(time
(plot3d (contour-intervals3d (λ (x y)
(let ([ts (get-isosurface-ticks x (+ x y))])
(if (empty? ts) +nan.0 (length ts))))
#:samples 101 #:line-styles '(transparent))
#:x-min 0 #:x-max 10 #:y-min 0 #:y-max 10
#:x-label "bounds min" #:y-label "bounds size"
#:z-label "number of ticks"))
(time
(plot (contour-intervals (λ (x y)
(let ([ts (get-isosurface-ticks x (+ x y))])
(if (empty? ts) +nan.0 (length ts))))
#:samples 101)
#:x-min 0 #:x-max 10 #:y-min 0 #:y-max 10
#:x-label "bounds min" #:y-label "bounds size"))
(plot (function (λ (x) (count pre-tick-major? ((linear-ticks) 0 x))) #e0.1 10))
(plot (function (λ (x) (count pre-tick-major? ((linear-ticks #:number 40) 0 x))) 1 100))
(parameterize ([plot-x-ticks (linear-ticks #:base 2 #:divisors '(1 2))]
#;[plot-y-ticks (linear-ticks #:base (* 1 2 3 4 5) #:divisors '(1 2 3 4 5))])
(plot (function cos 0.013 2.1176)))
(parameterize ([plot-x-transform log-transform]
[plot-x-ticks (ticks (log-ticks-layout)
(fraction-ticks-format))]
[plot-y-ticks (fraction-ticks)])
(plot (function (λ (x) (+ 1 (cos x))) 0.0001 12)))
(parameterize ([plot-x-ticks (date-ticks #:number 3)]
[plot-y-ticks (currency-ticks)])
(plot (function values -1 1)))
(parameterize* ([currency-ticks-formats uk-currency-formats]
[currency-ticks-scales uk-currency-scales]
[plot-x-ticks (date-ticks)]
[plot-y-ticks (currency-ticks #:kind 'GBP)])
(plot (function values 101232512 2321236192)))
(parameterize ([plot-x-ticks (currency-ticks #:kind 'EUR
#:scales eu-currency-scales
#:formats eu-currency-formats)]
[plot-y-ticks (currency-ticks)])
(plot (function (λ (x) (* x 1.377)) 8000000 10000000)
#:title "EUR-USD Conversion, 2011-10-13"
#:x-label "Euros"
#:y-label "Dollars"))
(parameterize ([plot-x-ticks no-ticks])
(plot (function sin -1 4)))
(parameterize ([plot-x-transform log-transform]
[plot-y-transform log-transform]
[plot-x-ticks (log-ticks #:base 10)]
[plot-y-ticks (log-ticks #:base 2)])
(plot (function values 0.1 10)))
(parameterize ([plot-x-transform log-transform]
[plot-y-transform (stretch-transform -1 1 4)]
[plot-x-ticks (ticks (linear-ticks-layout)
(log-ticks-format #:base 10))]
[plot-y-ticks (ticks (linear-ticks-layout)
(currency-ticks-format #:kind 'USD))])
(plot (function log 0.1 10)))
(parameterize ([plot-x-transform log-transform]
[plot-x-ticks (log-ticks #:base 10)])
(plot (function values 10000000000000 1000000000000000)))
(plot (polar-axes) #:x-min -1 #:x-max 1 #:y-min -1 #:y-max 1)
(plot (polar-axes) #:x-min 0 #:x-max 3 #:y-min 0 #:y-max 3)
(plot (polar-axes) #:x-min 1 #:x-max 4 #:y-min 1 #:y-max 4)
(plot (polar-axes #:number 12) #:x-min 10 #:x-max 12 #:y-min 10 #:y-max 12)
(parameterize ([plot-z-transform log-transform]
[plot-z-ticks (log-ticks)]
[contour-samples (plot3d-samples)])
(values
(plot (contours (λ (x y) (exp (- (+ (sqr x) (sqr y))))) -2 2 -2 2 #:label "z"))
(plot (contour-intervals (λ (x y) (exp (- (+ (sqr x) (sqr y))))) -2 2 -2 2 #:label "z"))
(plot3d (contours3d (λ (x y) (exp (- (+ (sqr x) (sqr y))))) -2 2 -2 2 #:label "z"))
(plot3d (contour-intervals3d (λ (x y) (exp (- (+ (sqr x) (sqr y))))) -2 2 -2 2 #:label "z"))))
(plot (contours (λ (x y) (* 1/2 (+ (sqr x) (sqr y)))) -1 1 -1 1 #:label "z"))
(plot3d (contours3d (λ (x y) (* 1/2 (+ (sqr x) (sqr y)))) -1 1 -1 1 #:label "z"))
(parameterize ([plot-y-ticks (ticks-scale (plot-y-ticks) (linear-scale 2 1))])
(plot (list (function sqr -2 2)
(function sin -4 4))))
(define exp-scale (invertible-function exp log))
(parameterize ([plot-y-ticks (ticks-scale (log-ticks) exp-scale)])
(plot (function values -10 10)))
(parameterize ([plot-y-ticks (ticks-add (ticks no-ticks-layout (linear-ticks-format))
'(1/3 2/3))])
(plot (function sin -4 4)))
(plot (list (function sin -4 4)
(points '(#(-3.75 -1/4)) #:size 10)
(x-ticks (list (tick 1.5 #t "3/2") (tick 3 #t "Three")))
(y-ticks (list (tick 1/4 #t "1/4") (tick -1/4 #f "")))))
(parameterize ([plot-z-ticks (linear-ticks #:number 5)])
(plot3d (list (surface3d (λ (x y) (* 2 (+ (sin x) (cos y)))) -4 4 -4 4 #:alpha 1/2)
(x-ticks (list (tick 1.5 #t "3/2") (tick 3 #t "Three")))
(y-ticks (list (tick 1/3 #t "1/3") (tick -1/3 #f "1/3")))
(z-ticks (list (tick pi #f "π") (tick (- pi) #t ""))))))
(parameterize ([plot-title "Money for time in a sine wave"]
[plot-x-far-ticks (time-ticks)]
[plot-y-ticks (currency-ticks #:kind 'USD)]
[plot-y-far-ticks (ticks-scale (currency-ticks #:kind 'EUR) (linear-scale 1.47))]
[plot-x-label #f]
[plot-y-label #f])
(values
(parameterize ([plot-x-axis? #f]
[plot-x-far-axis? #f])
(plot (list (function sin -4 4)
(x-axis -0.25 #:ticks? #f #:labels? #t)
(x-axis 0.25 #:ticks? #t #:labels? #t #:far? #t))))
(parameterize ([plot-y-axis? #f]
[plot-y-far-axis? #f])
(plot (list (function sin -4 4)
(y-axis -1 #:ticks? #f #:labels? #t)
(y-axis 1 #:ticks? #t #:labels? #t #:far? #t))))))
(parameterize ([plot-y-ticks (fraction-ticks)])
(plot (function sin (- pi) pi)))
(parameterize ([plot-x-far-label "x far axis"]
[plot-x-ticks (linear-ticks #:number 10)]
[plot-y-far-label "y far axis"]
[plot-y-far-ticks (date-ticks)]
[plot-z-label "z axis"]
[plot-z-far-label "z far axis"]
[plot-z-far-ticks (currency-ticks #:number 5)])
(plot3d (surface3d (λ (x y) (+ (sin x) (cos y))) -2 2 -2 2 #:alpha 1/2)
#:angle 60 #:altitude 35))
(parameterize ([plot-title "Saddle"]
[plot-x-axis? #f]
[plot-y-axis? #f]
[plot-z-axis? #f]
[plot-x-far-axis? #f]
[plot-y-far-axis? #f]
[plot-z-far-axis? #f]
[plot-x-label #f]
[plot-y-label #f]
[plot-z-label #f]
[plot-x-far-label #f]
[plot-y-far-label #f]
[plot-z-far-label #f])
(plot3d (contour-intervals3d (λ (x y) (- (sqr x) (sqr y))) -2 2 -2 2
#:label "z")))
(parameterize ([plot-decorations? #f])
(values
(plot (function sin -4 4)
#:title "Hello")
(plot3d (contour-intervals3d (λ (x y) (- (sqr x) (sqr y))) -2 2 -2 2))))
(time
(define ((degrees-ticks-format suffix) x-min x-max ts)
(map (λ (label) (format "~a\ub0~a" label suffix))
((linear-ticks-format) x-min x-max ts)))
(define C-ticks (ticks (linear-ticks-layout) (degrees-ticks-format 'C)))
(define F/C-ticks (ticks-scale
(ticks (linear-ticks-layout) (degrees-ticks-format 'F))
(linear-scale 9/5 32)))
(define data (list #(0 0) #(15 0.6) #(30 9.5) #(45 10.0) #(60 16.6)
#(75 41.6) #(90 42.7) #(105 65.5) #(120 78.9)
#(135 78.9) #(150 131.1) #(165 151.1) #(180 176.2)))
(define (temp/time-trend x) (/ (sqr x) 180))
(define above-data (filter (λ (v) (match-let ([(vector x y) v])
(y . > . (temp/time-trend x))))
data))
(parameterize ([plot-x-ticks (time-ticks)]
[plot-y-ticks C-ticks]
[plot-y-far-ticks F/C-ticks])
(plot (list (function temp/time-trend 0 180 #:style 'long-dash #:color 3
#:label "Trend")
(lines data #:color 2 #:width 2)
(points data #:color 2 #:line-width 2 #:fill-color 0 #:sym 'fullcircle
#:label "Measurement")
(map (λ (d) (point-label d #:anchor 'bottom #:point-color 2 #:point-size 7))
above-data))
#:y-min -25 #:x-label "Time" #:y-label "Temp."
#:title "Temp./Time With Applied Heat (Measurement and Trend)")))
(parameterize ([plot-x-ticks (fraction-ticks)]
[plot-y-ticks (currency-ticks)])
(plot (list (function sin -4 4)
(function-label sin 1/3))))
(parameterize ((plot-x-tick-label-angle 45)
(plot-x-tick-label-anchor 'top-right)
(plot-y-tick-label-angle 45)
(plot-y-tick-label-anchor 'bottom-right)
(plot-x-far-tick-label-angle 45)
(plot-x-far-tick-label-anchor 'bottom-left)
(plot-y-far-tick-label-angle 45)
(plot-y-far-tick-label-anchor 'top-left)
(plot-x-far-label "x far axis")
(plot-y-far-label "y far axis"))
(plot (list (discrete-histogram '(#(asdglkj 5399) #(liegjd 5390) #(pqlcxkgfj 3534)))
(x-ticks (list (tick 1 #t "asdgwieasdgwefj")) #:far? #t)
(y-ticks (list (tick 2500 #t "asdgwegawegfgwiej")) #:far? #t))))