1 | /* Flot plugin that adds some extra symbols for plotting points. |
---|
2 | |
---|
3 | Copyright (c) 2007-2013 IOLA and Ole Laursen. |
---|
4 | Licensed under the MIT license. |
---|
5 | |
---|
6 | The symbols are accessed as strings through the standard symbol options: |
---|
7 | |
---|
8 | series: { |
---|
9 | points: { |
---|
10 | symbol: "square" // or "diamond", "triangle", "cross" |
---|
11 | } |
---|
12 | } |
---|
13 | |
---|
14 | */ |
---|
15 | |
---|
16 | (function ($) { |
---|
17 | function processRawData(plot, series, datapoints) { |
---|
18 | // we normalize the area of each symbol so it is approximately the |
---|
19 | // same as a circle of the given radius |
---|
20 | |
---|
21 | var handlers = { |
---|
22 | square: function (ctx, x, y, radius, shadow) { |
---|
23 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 |
---|
24 | var size = radius * Math.sqrt(Math.PI) / 2; |
---|
25 | ctx.rect(x - size, y - size, size + size, size + size); |
---|
26 | }, |
---|
27 | diamond: function (ctx, x, y, radius, shadow) { |
---|
28 | // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) |
---|
29 | var size = radius * Math.sqrt(Math.PI / 2); |
---|
30 | ctx.moveTo(x - size, y); |
---|
31 | ctx.lineTo(x, y - size); |
---|
32 | ctx.lineTo(x + size, y); |
---|
33 | ctx.lineTo(x, y + size); |
---|
34 | ctx.lineTo(x - size, y); |
---|
35 | }, |
---|
36 | triangle: function (ctx, x, y, radius, shadow) { |
---|
37 | // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) |
---|
38 | var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); |
---|
39 | var height = size * Math.sin(Math.PI / 3); |
---|
40 | ctx.moveTo(x - size/2, y + height/2); |
---|
41 | ctx.lineTo(x + size/2, y + height/2); |
---|
42 | if (!shadow) { |
---|
43 | ctx.lineTo(x, y - height/2); |
---|
44 | ctx.lineTo(x - size/2, y + height/2); |
---|
45 | } |
---|
46 | }, |
---|
47 | cross: function (ctx, x, y, radius, shadow) { |
---|
48 | // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 |
---|
49 | var size = radius * Math.sqrt(Math.PI) / 2; |
---|
50 | ctx.moveTo(x - size, y - size); |
---|
51 | ctx.lineTo(x + size, y + size); |
---|
52 | ctx.moveTo(x - size, y + size); |
---|
53 | ctx.lineTo(x + size, y - size); |
---|
54 | } |
---|
55 | }; |
---|
56 | |
---|
57 | var s = series.points.symbol; |
---|
58 | if (handlers[s]) |
---|
59 | series.points.symbol = handlers[s]; |
---|
60 | } |
---|
61 | |
---|
62 | function init(plot) { |
---|
63 | plot.hooks.processDatapoints.push(processRawData); |
---|
64 | } |
---|
65 | |
---|
66 | $.plot.plugins.push({ |
---|
67 | init: init, |
---|
68 | name: 'symbols', |
---|
69 | version: '1.0' |
---|
70 | }); |
---|
71 | })(jQuery); |
---|