|
|
1
Gerardo Furtado
4 年前
在您的代码中
enter
是选择的
<g>
元素,每个元素只有一个
<rect>
.因此,使用
select
而不是
selectAll
:
enter.select("rect")
这是您修改后的代码:
const margin = {top: 30, bottom: 70, left: 40, right: 10};
const width = 600, height=200;
const color = d3.scaleOrdinal(d3.schemeCategory20);
const data = [{name:'ahmad',age:22},
{name:'saleh',age:15},
{name:'fulan',age:35},
{name:'fazil',age:48},
{name:'majid',age:50}
];
const svg = d3.select("body").append("svg")
.attr("width",width)
.attr("height",height)
.style("background-color","beige");
const max = d3.max(data,d=>{return d.age;});
const min = 0;
const y = d3.scaleLinear().domain([min,max]).range([height-margin.bottom,margin.top]);
const yAxis = d3.axisLeft().scale(y);
const x = d3.scaleBand()
.domain(data.map(d=>{return d.name;}))
.range([margin.left,width-margin.right])
.padding(0.4);
const xAxis = d3.axisBottom().scale(x);
svg.append("g").attr("class","y axis").attr("transform","translate("+margin.left+",0)").call(yAxis);
svg.append("g").attr("class","x axis").attr("transform","translate(0,"+(height-margin.bottom)+")").call(xAxis);
const selection = svg.selectAll(".name").data(data);
const enter = selection.enter().append("g").attr("class","name");
const exit = selection.exit();
enter.append("rect").attr("x",d=>{return x(d.name);}).attr("y",y(0)).attr("width",x.bandwidth()).attr("height",0).attr("fill",d=>{return color(d.name);});
enter.select("rect")
.transition()
.delay((d,i)=>{
return 100*i;
})
.duration(1000)
.ease(d3.easeElastic)
.attr("y",d=>{return y(d.age);})
.attr("height",d=>{return y(0)-y(d.age);});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.3/d3.min.js"></script>
只是为了让你了解
选择
和
全选
(下表中有更多信息),您可以使用
全选
,但与
进来
选择例如:
svg.selectAll("rect")
这是:
const margin = {top: 30, bottom: 70, left: 40, right: 10};
const width = 600, height=200;
const color = d3.scaleOrdinal(d3.schemeCategory20);
const data = [{name:'ahmad',age:22},
{name:'saleh',age:15},
{name:'fulan',age:35},
{name:'fazil',age:48},
{name:'majid',age:50}
];
const svg = d3.select("body").append("svg")
.attr("width",width)
.attr("height",height)
.style("background-color","beige");
const max = d3.max(data,d=>{return d.age;});
const min = 0;
const y = d3.scaleLinear().domain([min,max]).range([height-margin.bottom,margin.top]);
const yAxis = d3.axisLeft().scale(y);
const x = d3.scaleBand()
.domain(data.map(d=>{return d.name;}))
.range([margin.left,width-margin.right])
.padding(0.4);
const xAxis = d3.axisBottom().scale(x);
svg.append("g").attr("class","y axis").attr("transform","translate("+margin.left+",0)").call(yAxis);
svg.append("g").attr("class","x axis").attr("transform","translate(0,"+(height-margin.bottom)+")").call(xAxis);
const selection = svg.selectAll(".name").data(data);
const enter = selection.enter().append("g").attr("class","name");
const exit = selection.exit();
enter.append("rect").attr("x",d=>{return x(d.name);}).attr("y",y(0)).attr("width",x.bandwidth()).attr("height",0).attr("fill",d=>{return color(d.name);});
svg.selectAll("rect")
.transition()
.delay((d,i)=>{
return 100*i;
})
.duration(1000)
.ease(d3.easeElastic)
.attr("y",d=>{return y(d.age);})
.attr("height",d=>{return y(0)-y(d.age);});
<脚本src=”https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.3/d3.min.js“></script>
表格:
之间的差异
选择
和
全选
。
方法
|
选择()
|
selectAll()
|
选择
|
选择与选择器字符串匹配的第一个元素
|
选择与选择器字符串匹配的所有元素
|
分组
|
不影响分组
|
影响分组
|
数据传播
|
传播数据
|
不传播数据
|
|