//Create a date parser
var ParseDate = d3.time.format("%d-%b-%y").parse;
//Read TSV file
d3.tsv("data.tsv", function(error, data){
//Parse Data into useable format
data.forEach(function(d){
d.date = ParseDate(d.date);
d.close = +d.close;
//the + sign converts numeric string to number
});
//Print the data as a table in the console
console.table(data);
});
//Set margins and sizes
var margin = {
top: 20,
bottom: 70,
right: 30,
left: 50
};
var width = 700 - margin.left - margin.right;
var height = 500 - margin.top - margin.bottom;
//Create date parser
var ParseDate = d3.time.format("%Y-%m").parse;
//Create x and y scale to scale inputs
var xScale = d3.scale.ordinal().rangeRoundBands([0, width], .05);
var yScale = d3.scale.linear().range([height, 0]);
//Create x and y axes
var xAxis = d3.svg.axis().scale(xScale)
.orient("bottom")
.tickFormat(d3.time.format("%Y-%m"));
var yAxis = d3.svg.axis().scale(yScale)
.orient("left")
.ticks(10);
可视化具体设计
柱状图不需要特别的设计。
创建svg
//Create an SVG element and append it to the DOM
var svgElement = d3.select("body").append("svg")
.attr({ "width": width + margin.left + margin.right, "height": height + margin.top + margin.bottom })
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
加载外部数据
//Read CSV file
d3.csv("./bar-data.csv", function (data) {
//Parse Data into useable format
data.forEach(function (d) {
d.date = ParseDate(d.date);
d.value = +d.value;
//the + sign converts string automagically to number
});
//Set the domains of our scales
xScale.domain(data.map(function(d) { return d.date; }));
yScale.domain([0, d3.max(data, function (d) { return d.value; })]);
组合代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>bar chart</title>
<script src="https://d3js.org/d3.v3.js"></script>
<style>
.axis {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: grey;
stroke-width: 1;
/* 指定SVG元素<path>的渲染模式 */
shape-rendering: crispEdges;
}
</style>
</head>
<body>
<script>
//Set margins and sizes
var margin = {
top: 20,
bottom: 70,
right: 30,
left: 50
};
var width = 700 - margin.left - margin.right;
var height = 500 - margin.top - margin.bottom;
//Create date parser
var ParseDate = d3.time.format("%Y-%m").parse;
//Create x and y scale to scale inputs
var xScale = d3.scale.ordinal().rangeRoundBands([0, width], .05);
var yScale = d3.scale.linear().range([height, 0]);
//Create x and y axes
var xAxis = d3.svg.axis().scale(xScale)
.orient("bottom")
.tickFormat(d3.time.format("%Y-%m"));
var yAxis = d3.svg.axis().scale(yScale)
.orient("left")
.ticks(10);
//Create an SVG element and append it to the DOM
var svgElement = d3.select("body").append("svg")
.attr({ "width": width + margin.left + margin.right, "height": height + margin.top + margin.bottom })
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
//Read CSV file
d3.csv("./bar-data.csv", function (data) {
//Parse Data into useable format
data.forEach(function (d) {
d.date = ParseDate(d.date);
d.value = +d.value;
//the + sign converts string automagically to number
});
//Set the domains of our scales
xScale.domain(data.map(function(d) { return d.date; }));
yScale.domain([0, d3.max(data, function (d) { return d.value; })]);
//Add X Axis
var x = svgElement.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll("text")
.style("text-anchor", "end")
.attr("dx", "-.8em")
.attr("dy", "-.55em")
.attr("transform", "rotate(-90)" );
//Add Y Axis
var y = svgElement.append("g")
.attr("class", "y axis")
.call(yAxis);
//Add label to y axis
y.append("text")
.attr("fill", "#000")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", "0.71em")
.attr("text-anchor", "end")
.text("Price ($)");
svgElement.selectAll("rect")
.data(data)
.enter().append("rect")
.style("fill", "steelblue")
.attr("x", function(d) { return xScale(d.date); })
.attr("width", xScale.rangeBand())
.attr("y", function(d) { return yScale(d.value); })
.attr("height", function(d) { return height - yScale(d.value); });
});
</script>
</body>
</html>