aboutsummaryrefslogtreecommitdiff
path: root/src/p.bqn
blob: 9d399262b07f25113d448ca0429c4ce2b44b5c33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Plot

width  384
pad    210

pa  At "class=Paren|stroke=currentColor|stroke-width=1"
pg  At "class=red|style=fill:none|stroke-width=1"
rc  At "class=code|stroke-width=1|rx=5"
gr  "g" At "font-family=BQN,monospace|font-size=18px"
Path  "path" Elt ⊣∾"d"<⊢

Pair  {
  "•Plot: 𝕨 and 𝕩 must consist of rows of numbers" ! 𝕨 ((1≤=)0,´@>) 𝕩
  "•Plot: 𝕨 and 𝕩 must have the same length" ! 𝕨 1((¯1⊑≢)) 𝕩
   𝕨 (< (¯1⊑≢) < )1 𝕩
}
PairRec  {
  d  𝕨𝕩
  𝕨 (2≤⌊´d)Pair⊣"•Plot: invalid depth mixing"!·´1=d˙, ⥊𝕊¨ 𝕩
}
Plot  {
  xy  1e300 (⊣-⌈⌊) ⍉> 𝕨 PairRec 𝕩   # organize and clip
  pts  <˘ xy
  win  -˜`¨ bounds  (´≍⌈´)¨ pts    # min and range; min and max
  ar  1((÷4)>∨1.5<) ÷˜´ 1¨win    # height÷width
  dim  width (⊣≍×) ar
  Scale  ({¬𝕏}(1) {𝕩÷˜𝕨-˜}´¨ win) {𝕎𝕩}¨ 
  line  {'M' ∾⥊ "L "¨1𝕩}¨ (/≠¨xy)  FmtNum ⍉> dim×Scale pts
  ((-pad)dim+2×pad) SVG gr Enc ∾⥊¨ 
    <"rect" Elt rc(Pos-pad÷2)"width""height"˘FmtNum dim+pad
    paPath¨ ((0≤∧≤1)/·<˘("M "˘"VH")¨·FmtNum dim(×∾˘)(=⌜˜2)×) Scale 0
    pgPath¨ line
  
}