245 lines
10 KiB
Racket
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))))
|