HTMLcopy
1
<div id="container"></div>
CSScopy
8
1
html,
2
body,
3
#container {
4
width: 100%;
5
height: 100%;
6
margin: 0;
7
padding: 0;
8
}
JavaScriptcopy
x
1
var path;
2
var palette;
3
var chart;
4
anychart.onDocumentReady(function () {
5
// create stage
6
var stage = anychart.graphics.create('container');
7
8
// creating pie chart
9
chart = anychart.pie([2, 4, 3, 6]);
10
11
// set container
12
chart.container(stage);
13
14
// configure chart.
15
chart.legend(false);
16
chart.tooltip(false);
17
chart.labels(false);
18
19
// add events listener for custom drawing.
20
chart.listen('pointshover', function (e) {
21
drawArc(e.point);
22
});
23
24
chart.listen('pointsselect', function (e) {
25
drawArc(e.point);
26
});
27
28
chart.draw();
29
30
// path of the acr
31
path = stage.path().stroke(null);
32
33
// chart palette. Need to make the arc colorized same as the point it belongs to.
34
palette = chart.palette();
35
});
36
37
// helper function to draw a beauty arc
38
function drawArc(point) {
39
path.clear();
40
41
// return if we unhover point
42
if (!point.hovered()) return true;
43
44
// set fill for path
45
var fill = palette.itemAt(point.getIndex());
46
// opacity of the outer arc
47
path.fill(anychart.color.setOpacity(fill, 1, true));
48
49
// some props to draw outer arc
50
var start = point.getStartAngle();
51
var sweep = point.getEndAngle() - start;
52
var radius = chart.getPixelRadius();
53
var explodeValue = chart.getPixelExplode();
54
var selected = point.selected();
55
56
var cx = chart.center().getPoint().x;
57
var cy = chart.center().getPoint().y;
58
59
// distance between pie and outer arc
60
var innerR = radius + 3;
61
// width (thickness) of outer arc
62
var outerR = innerR + 5;
63
64
var ex = 0;
65
var ey = 0;
66
67
if (selected) {
68
var angle = start + sweep / 2;
69
var cos = Math.cos(toRadians(angle));
70
var sin = Math.sin(toRadians(angle));
71
ex = explodeValue * cos;
72
ey = explodeValue * sin;
73
}
74
acgraph.vector.primitives.donut(
75
path,
76
cx + ex,
77
cy + ey,
78
outerR,
79
innerR,
80
start,
81
sweep
82
);
83
}
84
85
// helper function to convert degrees to radians
86
function toRadians(angleDegrees) {
87
return (angleDegrees * Math.PI) / 180;
88
}