-
Notifications
You must be signed in to change notification settings - Fork 11
/
ex-00350-scatter-plot.ts
83 lines (72 loc) · 2.42 KB
/
ex-00350-scatter-plot.ts
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// ### Scatter plot [(source)](https://github.com/wwwtyro/candygraph/blob/master/docs/examples/src/{{filename}})
// <canvas id="ex-00350" style="box-shadow: 0px 0px 8px #ccc;" width=384 height=384></canvas>
// skip-doc-start
import CandyGraph, {
createDefaultFont,
Circles,
OrthoAxis,
LinearScale,
CartesianCoordinateSystem,
} from "../../../src";
export default async function ScatterPlot(cg: CandyGraph) {
// Generate some x & y data.
const xs = [];
const ys = [];
for (let i = 0; i < 10000; i++) {
const x = Math.random();
const y = x;
const d = 0.8 * (Math.random() - 0.5) * Math.pow(Math.sin(x * Math.PI), 2.0);
xs.push(x - d);
ys.push(y + d);
}
// Scale the canvas by the device pixel ratio.
const dpr = window.devicePixelRatio;
const canvas = document.getElementById("ex-00350") as HTMLCanvasElement;
canvas.style.width = `${canvas.width}px`;
canvas.style.height = `${canvas.height}px`;
canvas.width *= dpr;
canvas.height *= dpr;
// Create a viewport. Units are in pixels.
const viewport = { x: 0, y: 0, width: 384 * dpr, height: 384 * dpr };
// Create a coordinate system from two linear scales. Note
// that we add 32 pixels of padding to the left and bottom
// of the viewport, and 16 pixels to the top and right.
const coords = new CartesianCoordinateSystem(
cg,
new LinearScale([0, 1], [32 * dpr, viewport.width - 16 * dpr]),
new LinearScale([0, 1], [32 * dpr, viewport.height - 16 * dpr])
);
const font = await createDefaultFont(cg);
// Clear the viewport.
cg.clear([1, 1, 1, 1]);
// Render the data as circles and the axes.
cg.render(coords, viewport, [
new Circles(cg, xs, ys, {
colors: [1, 0.5, 0.0, 1.0],
radii: 1 * dpr,
borderWidths: 0 * dpr,
}),
new OrthoAxis(cg, coords, "x", font, {
labelSide: 1,
tickOffset: -2.5 * dpr,
tickLength: 6 * dpr,
tickStep: 0.2,
tickWidth: 1 * dpr,
axisWidth: 1 * dpr,
labelSize: 12 * dpr,
labelFormatter: (n) => n.toFixed(1),
}),
new OrthoAxis(cg, coords, "y", font, {
tickOffset: 2.5 * dpr,
tickLength: 6 * dpr,
tickStep: 0.2,
tickWidth: 1 * dpr,
axisWidth: 1 * dpr,
labelSize: 12 * dpr,
labelFormatter: (n) => n.toFixed(1),
}),
]);
// Copy the plot to a new canvas and add it to the document.
cg.copyTo(viewport, document.getElementById("ex-00350") as HTMLCanvasElement);
}
// skip-doc-stop