D3.js画3D方柱
D3.js入门实例-3D方柱
最近由于项目需要去实现3D可视化,所以学了一下D3.js。使用版本是v4.x。
前言
我们先定义下要引用的参数
let param = {
data: [
{
xName: '1月',
value: '0.01'
},
{
xName: '2月',
value: '0.1'
},
{
xName: '3月',
value: '1000'
},
{
xName: '4月',
value: '7'
},
{
xName: '5月',
value: '22'
},
{
xName: '6月',
value: '90'
},
{
xName: '7月',
value: '700'
}
],
padding: { // svg内部padding
top: 20,
bottom: 20,
left: 20,
right: 20
},
svgHeight: 500, // svg高度
svgWdith: 500, // svg宽度
id: '#js-svg' // svg标签
}
比例尺
我们画一个柱状图,y轴的数据大小如上,最大值和最小值之间间隔由差不多1000,我们不可能在y轴坐标上显示0到1000都显示出来,这时候我们需要一个映射关系,由某个区域的值去映射到另一个区域,但是它们之间的关系不变。
在这里,我主要介绍两个常用比例尺,线性比例尺和序数比例尺。
这个实例中,我们X轴用的是序数比例尺,Y轴用的是线性比例尺。
线性比例尺(Y轴)
定义一个Y轴比例尺函数
let drawYscale () {}
在函数里定义一个线性比例尺
d3.scaleLinear()
接下来我们要规定其定义域 domain(arr)
d3.scaleLinear().domain(param.data.map((d) => {
return d.value
}))
注意:这里domain(arr)接受一个数值数组,数组需要包含两个及两个以上值,而且如果不是数值会被强制转换成数值类型。多个值会形成分段比例尺。
然后我们规定值域 range([range])
d3.scaleLinear().domain(param.data.map((d) => {
return d.value
})).range([svgHeight - padding.top - padding.bottom, 0])
range和domain一样,接受一个数组,和domain不一样的是数组不一定是要数值类型。