📅  最后修改于: 2023-12-03 14:40:34.696000             🧑  作者: Mango
D3.js是一个JavaScript库,用于创建动态、交互式数据可视化,它是基于数据驱动文档的思想设计的。D3提供了多种内置颜色方案,其中schemeGnBu[]函数是其中之一。
schemeGnBu[]函数是D3中的一种调色板,用于设置一组颜色值,可以用于绘制柱状图、散点图等数据可视化图表。
schemeGnBu函数的参数是一个整数n,表示需要返回的颜色值的数量。例如:
d3.schemeGnBu[9]
将返回一个包含9个颜色值的数组。
schemeGnBu[]函数会返回一个包含指定数量颜色值的数组,数组中每个元素都是一个16进制颜色值。例如:
["#F7FCF0","#E0F3DB","#CCEBC5","#A8DDB5","#7BCCC4","#4EB3D3","#2B8CBE","#0868AC","#084081"]
该数组表示从浅色到深色的9个颜色值。
以下示例使用schemeGnBu[]函数绘制柱状图:
const data = [10, 20, 30, 40, 50];
const width = 400;
const height = 300;
const margin = { top: 10, right: 10, bottom: 30, left: 30 };
// 创建SVG画布
const svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
// 定义x轴和y轴比例尺
const xScale = d3.scaleBand()
.domain(d3.range(data.length))
.range([margin.left, width - margin.right])
.padding(0.1);
const yScale = d3.scaleLinear()
.domain([0, d3.max(data)])
.nice()
.range([height - margin.bottom, margin.top]);
// 绘制柱状图
svg.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("x", (d, i) => xScale(i))
.attr("y", d => yScale(d))
.attr("width", xScale.bandwidth())
.attr("height", d => yScale(0) - yScale(d))
.attr("fill", (d, i) => d3.schemeGnBu[data.length][i]);
// 添加x轴和y轴
const xAxis = d3.axisBottom(xScale)
.tickFormat(i => i+1);
const yAxis = d3.axisLeft(yScale);
svg.append("g")
.attr("transform", `translate(0,${height - margin.bottom})`)
.call(xAxis);
svg.append("g")
.attr("transform", `translate(${margin.left},0)`)
.call(yAxis);
代码使用schemeGnBu[]函数返回一个数组,根据数据长度取出对应的颜色值,将颜色值和柱状图对应项的填充颜色关联起来,从而实现绘制带颜色渐变的柱状图的功能。
以下示例使用schemeGnBu[]函数绘制散点图:
const data = [
{x: 10, y: 20},
{x: 20, y: 30},
{x: 30, y: 40},
{x: 40, y: 50},
{x: 50, y: 60}
];
const width = 400;
const height = 300;
const margin = { top: 10, right: 10, bottom: 30, left: 30 };
// 创建SVG画布
const svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
// 定义x轴和y轴比例尺
const xScale = d3.scaleLinear()
.domain([0, d3.max(data, d => d.x)])
.nice()
.range([margin.left, width - margin.right]);
const yScale = d3.scaleLinear()
.domain([0, d3.max(data, d => d.y)])
.nice()
.range([height - margin.bottom, margin.top]);
// 绘制散点图
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", d => xScale(d.x))
.attr("cy", d => yScale(d.y))
.attr("r", 5)
.attr("fill", (d, i) => d3.schemeGnBu[data.length][i]);
// 添加x轴和y轴
const xAxis = d3.axisBottom(xScale);
const yAxis = d3.axisLeft(yScale);
svg.append("g")
.attr("transform", `translate(0,${height - margin.bottom})`)
.call(xAxis);
svg.append("g")
.attr("transform", `translate(${margin.left},0)`)
.call(yAxis);
与绘制柱状图类似,代码中同样使用schemeGnBu[]函数获取需要的颜色值数组,并使用颜色值数组中的对应颜色值,设置散点图各项的填充颜色,最终实现绘制带颜色渐变的散点图的功能。
通过上述示例,我们了解了D3.js中的schemeGnBu[]函数,该函数可以方便地获取一组颜色值,应用于数据可视化中,带来良好的视觉效果,提高数据的传达和阐述效率。当然D3.js中还有更多样式和美观的调色板,我们可以根据不同需求进行选择。