-
Notifications
You must be signed in to change notification settings - Fork 0
/
emchart.js
73 lines (56 loc) · 2.63 KB
/
emchart.js
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
function emachart() {
var margin = {top: 300, right: 50, bottom: 10, left: 5 },
width = 920, height = 230, mname = "mbar1";
function emalinerender(selection) {
selection.each(function(data) {
var x = d3.time.scale()
.domain([startDomain, endDomain])
.range([width / 8 / 2, (width - width / 8 / 2 )]);
var y = d3.scale.linear()
.rangeRound([height, 0]);
var xAxis = d3.svg.axis()
.scale(x);
var yAxis = d3.svg.axis()
.scale(y)
.ticks(Math.floor(height/50));
var svg = d3.select(this).select("svg")
.append("g")
.attr('class','ema_chart ema_chart_wrapper_'+mname)
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var new1_genData = data.filter(function(d){
if(d.Date > startDomain && d.Date <= endDomain){
return d;
}
});
y.domain(d3.extent(data, function(d) { return d.ema; })).nice();
var xtickdelta = Math.ceil(60/(width/data.length))
xAxis.tickValues(x.domain().filter(function(d, i) { return !((i+Math.floor(xtickdelta/2)) % xtickdelta); }));
svg.append("g")
.attr("class", "axis yaxis")
.attr("transform", "translate(" + width + ",0)")
.call(yAxis.orient("right").tickFormat("").tickSize(0));
var valueline = d3.svg.line()
.x(function(d) { return x(d.Date)})
.y(function(d) { return y(d.ema); })
.interpolate('basis');
svg.append("path")
.attr("class", mname+"line line")
.attr("d", valueline(data));
var indicator_g = svg.append('g').attr('class','indicator_g').attr('transform',"translate(" + (width) +","+(y(data[data.length-1].ema) -7 ) +")");
indicator_g.append('svg').attr('viewBox',"0 0 65 15").attr("enable-background","new 0 0 65 15").attr('xml:space',"preserve");
indicator_g.append('path').attr("d","M65.1,0H11C8.2,0,6.8,0.7,4.5,2.7L0,7.2l4.3,4.6c0,0,3,3.2,6.5,3.2H65L65.1,0L65.1,0z").attr('class',mname+'_indicator');
indicator_g.append('text').attr('x',12).attr('y',0).attr('dy','1em').text(data[data.length-1].ema.toFixed(2));
});
} // emalinerender
emalinerender.mname = function(value) {
if (!arguments.length) return mname;
mname = value;
return emalinerender;
};
emalinerender.margin = function(value) {
if (!arguments.length) return margin.top;
margin.top = value;
return emalinerender;
};
return emalinerender;
} // emachart