2 nv.models.distribution = function() {
4 //============================================================
5 // Public Variables with Default Settings
6 //------------------------------------------------------------
8 var margin = {top: 0, right: 0, bottom: 0, left: 0}
9 , width = 400 //technically width or height depending on x or y....
11 , axis = 'x' // 'x' or 'y'... horizontal or vertical
12 , getData = function(d) { return d[axis] } // defaults d.x or d.y
13 , color = nv.utils.defaultColor()
14 , scale = d3.scale.linear()
18 //============================================================
21 //============================================================
23 //------------------------------------------------------------
27 //============================================================
30 function chart(selection) {
31 selection.each(function(data) {
32 var availableLength = width - (axis === 'x' ? margin.left + margin.right : margin.top + margin.bottom),
33 naxis = axis == 'x' ? 'y' : 'x',
34 container = d3.select(this);
37 //------------------------------------------------------------
40 scale0 = scale0 || scale;
42 //------------------------------------------------------------
45 //------------------------------------------------------------
46 // Setup containers and skeleton of chart
48 var wrap = container.selectAll('g.nv-distribution').data([data]);
49 var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-distribution');
50 var gEnter = wrapEnter.append('g');
51 var g = wrap.select('g');
53 wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
55 //------------------------------------------------------------
58 var distWrap = g.selectAll('g.nv-dist')
59 .data(function(d) { return d }, function(d) { return d.key });
61 distWrap.enter().append('g');
63 .attr('class', function(d,i) { return 'nv-dist nv-series-' + i })
64 .style('stroke', function(d,i) { return color(d, i) });
66 var dist = distWrap.selectAll('line.nv-dist' + axis)
67 .data(function(d) { return d.values })
68 dist.enter().append('line')
69 .attr(axis + '1', function(d,i) { return scale0(getData(d,i)) })
70 .attr(axis + '2', function(d,i) { return scale0(getData(d,i)) })
71 distWrap.exit().selectAll('line.nv-dist' + axis)
73 .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
74 .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
75 .style('stroke-opacity', 0)
78 .attr('class', function(d,i) { return 'nv-dist' + axis + ' nv-dist' + axis + '-' + i })
80 .attr(naxis + '2', size);
83 .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
84 .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
87 scale0 = scale.copy();
95 //============================================================
96 // Expose Public Variables
97 //------------------------------------------------------------
98 chart.options = nv.utils.optionsFunc.bind(chart);
100 chart.margin = function(_) {
101 if (!arguments.length) return margin;
102 margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
103 margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
104 margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
105 margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
109 chart.width = function(_) {
110 if (!arguments.length) return width;
115 chart.axis = function(_) {
116 if (!arguments.length) return axis;
121 chart.size = function(_) {
122 if (!arguments.length) return size;
127 chart.getData = function(_) {
128 if (!arguments.length) return getData;
129 getData = d3.functor(_);
133 chart.scale = function(_) {
134 if (!arguments.length) return scale;
139 chart.color = function(_) {
140 if (!arguments.length) return color;
141 color = nv.utils.getColor(_);
144 //============================================================