📅  最后修改于: 2023-12-03 15:14:35.278000             🧑  作者: Mango
D3.js是一个用于制作数据可视化的JavaScript库。其中包含了许多图表类型,如散点图、折线图、柱状图、地图等。本文将介绍D3.js中的部分图表类型,并提供相应代码片段。
折线图用来表示随时间或其它因素而变化的数据。其基本思路是以时间或数据分成若干个点,然后连接这些点。下面是绘制折线图的基本步骤及代码片段。
var svgWidth = 800, svgHeight = 600;
var margin = { top: 20, right: 20, bottom: 30, left: 50 };
var width = svgWidth - margin.left - margin.right;
var height = svgHeight - margin.top - margin.bottom;
var svg = d3.select('svg')
.attr('width', svgWidth)
.attr('height', svgHeight);
var g = svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var data = [
{ date: "2010-01-01", value: 10 },
{ date: "2010-02-01", value: 20 },
{ date: "2010-03-01", value: 30 },
{ date: "2010-04-01", value: 40 },
{ date: "2010-05-01", value: 50 },
{ date: "2010-06-01", value: 60 },
{ date: "2010-07-01", value: 70 },
{ date: "2010-08-01", value: 80 },
{ date: "2010-09-01", value: 90 },
{ date: "2010-10-01", value: 100 }
];
var x = d3.scaleTime()
.rangeRound([0, width]);
var y = d3.scaleLinear()
.rangeRound([height, 0]);
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain(d3.extent(data, function(d) { return d.value; }));
var line = d3.line()
.x(function(d) { return x(d.date); })
.y(function(d) { return y(d.value); });
g.append('path')
.datum(data)
.attr('fill', 'none')
.attr('stroke', 'steelblue')
.attr('stroke-linejoin', 'round')
.attr('stroke-linecap', 'round')
.attr('stroke-width', 1.5)
.attr('d', line);
饼图用于比较不同部分占总体的比例。下面是绘制饼图的基本步骤及代码片段。
var svgWidth = 800, svgHeight = 600;
var margin = { top: 20, right: 20, bottom: 30, left: 50 };
var width = svgWidth - margin.left - margin.right;
var height = svgHeight - margin.top - margin.bottom;
var svg = d3.select('svg')
.attr('width', svgWidth)
.attr('height', svgHeight);
var g = svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var data = [
{ name: "A", value: 10 },
{ name: "B", value: 20 },
{ name: "C", value: 30 },
{ name: "D", value: 40 },
{ name: "E", value: 50 },
];
var pie = d3.pie()
.sort(null)
.value(function(d) { return d.value; });
var path = d3.arc()
.outerRadius(radius - 10)
.innerRadius(0);
var g = g.selectAll(".arc")
.data(pie(data))
.enter().append("g")
.attr("class", "arc");
g.append("path")
.attr("d", path)
.attr("fill", function(d) { return color(d.data.name); })
.attr('stroke', 'white')
.on("mouseover", function(d) {
d3.select(this)
.transition()
.duration(100)
.attr('transform', 'scale(1.1)');
})
.on("mouseout", function(d) {
d3.select(this)
.transition()
.duration(100)
.attr('transform', 'scale(1)');
});
散点图用于比较两个变量之间的关系。下面是绘制散点图的基本步骤及代码片段。
var svgWidth = 800, svgHeight = 600;
var margin = { top: 20, right: 20, bottom: 30, left: 50 };
var width = svgWidth - margin.left - margin.right;
var height = svgHeight - margin.top - margin.bottom;
var svg = d3.select('svg')
.attr('width', svgWidth)
.attr('height', svgHeight);
var g = svg.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var data = [
{ x: 10, y: 20 },
{ x: 20, y: 30 },
{ x: 30, y: 40 },
{ x: 40, y: 50 },
{ x: 50, y: 60 },
{ x: 60, y: 70 },
{ x: 70, y: 80 },
{ x: 80, y: 90 },
{ x: 90, y: 100 },
{ x: 100, y: 110 }
];
var x = d3.scaleLinear()
.rangeRound([0, width])
.domain([0, d3.max(data, function(d) { return d.x; })]);
var y = d3.scaleLinear()
.rangeRound([height, 0])
.domain([0, d3.max(data, function(d) { return d.y; })]);
g.selectAll("circle")
.data(data)
.enter().append("circle")
.attr("cx", function(d) { return x(d.x); })
.attr("cy", function(d) { return y(d.y); })
.attr("r", 5)
.attr("fill", "steelblue")
.attr('stroke', 'white')
.on("mouseover", function(d) {
d3.select(this)
.transition()
.duration(100)
.attr('r', 10);
})
.on("mouseout", function(d) {
d3.select(this)
.transition()
.duration(100)
.attr('r', 5);
});
本文介绍了D3.js中的三种图表类型:折线图、饼图和散点图,为了更好地展示图表,还提供了相应的代码片段。D3.js灵活的API可以帮助开发者轻松实现各种各样的数据可视化效果,是数据可视化的一大佼佼者。