HTMLcopy
1
<div id="container"></div>
CSScopy
6
1
html, body, #container {
2
width: 100%;
3
height: 100%;
4
margin: 0;
5
padding: 0;
6
}
JavaScriptcopy
x
1
anychart.onDocumentReady(function () {
2
3
//create scatter chart
4
var chart = anychart.scatter();
5
6
//set container id for the chart
7
chart.container('container');
8
9
//set scales settings
10
chart.yScale().minimumGap(0).maximumGap(0);
11
chart.xScale().minimumGap(0).maximumGap(0);
12
13
//create first series with mapped data
14
chart.marker(generateData(400, 800, 90, 1000))
15
.size(3)
16
.stroke('none')
17
.hovered().size(8);
18
19
//create second series with mapped data
20
chart.marker(generateData(400, 800, 0, 1000))
21
.size(3)
22
.stroke('none')
23
.hovered().size(8);
24
25
//create third series with mapped data
26
chart.marker(generateData(400, 800, 30, 500))
27
.size(3)
28
.stroke('none')
29
.hovered().size(8);
30
31
//create forth series with mapped data
32
chart.marker(generateData(400, 800, 60, 500))
33
.size(3)
34
.stroke('none')
35
.hovered().size(8);
36
37
/**
38
* Generating data inscribed in an ellipse
39
* @param {number} rx - ellipse x radius
40
* @param {number} ry - ellipse x radius
41
* @param {number} angle - the angle of rotation of the ellipse
42
* @param {number} count - number of points
43
*/
44
function generateData(rx, ry, angle, count) {
45
var result = [];
46
for (var i = 0; i < count; i++) {
47
var ang = Math.round(Math.random() * 360 * 100) / 100;
48
var cos = Math.cos(ang * Math.PI / 180);
49
var sin = Math.sin(ang * Math.PI / 180);
50
var rRatio = 1 - ((Math.log(Math.random() + 0.05) - Math.log(0.05)) / (Math.log(1.05) - Math.log(0.05)));
51
var R = rx * ry / Math.sqrt(ry * ry * cos * cos + rx * rx * sin * sin);
52
var px = R * rRatio * Math.cos((ang + angle) * Math.PI / 180);
53
var py = R * rRatio * Math.sin((ang + angle) * Math.PI / 180);
54
result.push([px, py]);
55
}
56
return result;
57
}
58
59
//initiate chart drawing
60
chart.draw();
61
});