d3-er
Version:
Custom d3 module created using some d3 modules and custom functions
131 lines (105 loc) • 3.54 kB
JavaScript
/* eslint-disable */
import json from '../data/data.json'
(function () {
'use strict'
var margin = {
top: 5,
right: 40,
bottom: 20,
left: 120
},
width = 900 - margin.left - margin.right,
height = 50 - margin.top - margin.bottom
var bulletchart
var bulletsvg
bulletchart()
var barchart
barchart()
var linechart
linechart()
d3.selectAll('button').on('click', function () {
bulletsvg.datum(randomize).call(bulletchart.duration(1000))
barchart.data(json.updatebar)
linechart.data(json.updateline)
})
function bulletchart() {
bulletchart = d3.bullet().width(width).height(height)
bulletsvg = d3.select('#bulletchart')
.selectAll('svg')
.data(json.bullet)
.enter()
.append('svg')
.attr('class', 'bullet')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom).append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
bulletsvg.call(bulletchart)
var title = bulletsvg.append('g')
.style('text-anchor', 'end')
.attr('transform', 'translate(-6,' + height / 2 + ')')
title.append('text')
.attr('class', 'title')
.text(function (d) {
return d.title
})
title.append('text')
.attr('class', 'subtitle')
.attr('dy', '1em')
.text(function (d) {
return d.subtitle
})
}
function barchart() {
margin = {
top: 5,
right: 40,
bottom: 50,
left: 120
}
barchart = d3.barchart()
.x(function (d) {
return d.age
}).y(function (d) {
return d.name
})
.lowerThreshold(function (d) {
return d.min
})
.higherThreshold(function (d) {
return d.max
})
.margin(margin)
.data(json.bar)
d3.svg('#barchart').attr('height', 200).call(barchart)
}
function linechart() {
var formatDate = d3.timeParse("%b %Y");
linechart = d3.linechart()
.x(function (d) {
return formatDate(d.date);
})
.y(function (d) {
return +d.price;
})
.margin(margin)
.data(json.line);
d3.svg('#linechart')
.style('overflow', 'visible')
.style('height', '250')
.call(linechart)
}
function randomize(d) {
if (!d.randomizer) d.randomizer = randomizer(d)
d.ranges = d.ranges.map(d.randomizer)
d.markers = d.markers.map(d.randomizer)
d.measures = d.measures.map(d.randomizer)
return d
}
function randomizer(d) {
var k = d3.max(d.ranges) * .2
return function (d) {
return Math.max(0, d + k * (Math.random() - .5))
}
}
})()
/* eslint-enable */