首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >d3 selectAll混淆

d3 selectAll混淆
EN

Stack Overflow用户
提问于 2016-01-12 00:06:06
回答 1查看 231关注 0票数 1

我对D3中的选择方法感到困惑。根据Github上的描述,使用D3.selectAll(选择器)方法选择与指定选择器匹配的所有元素。将按文档遍历顺序(从上到下)选择元素。如果当前文档中没有与指定选择器匹配的元素,则返回空选择。

然后给出这些数据:

代码语言:javascript
复制
XValue     Yvalue     type A     type B    X2Value    Y2Value
1          2          A          A1        1          1
1          2          A          A2        1          1

在单击事件中,我如何引用类型为A= "A“的所有数据点?现在我使用`d3.select( this ),在本例中,它需要在同一点上单击两次才能对两个数据点进行操作。相反,我希望能够引用所有类型为A= "A“的属性,这样我就可以在X2 Y2值和X1 Y1值之间切换。

我的困惑是如何在d3.selectAll(this)中编写代码

编辑

看起来这样做的方法是使用d3.nest()方法,这样数据就可以正确地链接起来。但是,我仍然需要动态地将this分配给适当的键

代码语言:javascript
复制
d3.csv('AcreageData.csv', function (data) {

var nestedCsv = d3.nest()
        .key(function (d) { return d.type A; })
        .entries(data);

 var circles = svg.selectAll('circle')
    .data(data)
    .enter()
    .append('circle')

    .attr('cx',function (d,i) { 
        return xScale(nestedCsv[i].values.X2Value) })   
    .attr('cy',function (d,i) { 
        return yScale(nestedCsv[i].values.Y2Value) })   
    .attr('r',function (d,i) { 
        return Math.abs(rScale(nestedCsv[i].values.Radii))})    
    .attr('fill',function (d,i) { 
        return cScale(nestedCsv[i].values.TypeA); })
    .attr("stroke",function (d,i) { 
        return cScale(nestedCsv[i].values.TypeA); })    
    .attr('stroke-width',4)

    .on('click', function (d) {
    d3.select(this)
    .transition()
    .attr('r', 50)
    .duration(500)
    .attr('cx',function (d,i) { 
            return xScale(nestedCsv[i].values.XValue) })
    .attr('cy',function (d,i) { 
            return yScale(nestedCsv[i].values.Yvalue) })
    .attr('r',function (d,i) { 
            return Math.abs(rScale(nestedCsv[i].radii))})
    .attr('fill', "none")
    .attr("stroke",function (d,i) { 
            return cScale(nestedCsv[i].TypeA); })
    .attr('stroke-width',4)
     })

这个结论我在他的例子中读到了http://www.jeromecukier.net/blog/2012/05/28/manipulating-data-like-a-boss-with-d3/,他可以通过名字直接选择他想要动画的东西,但是因为我想做鼠标点击,所以我需要这个来引用选定的点和它的所有相关点。这绝对是正确的方法,但我在语法上遇到了困难。

EN

回答 1

Stack Overflow用户

发布于 2016-01-12 00:23:05

您可能需要提供一个DOM示例来让我们完全理解您在做什么,但通常您会在DOM元素上使用selectselectAll

例如,您可以使用以下代码来选择一大堆圆,并一次性更改所有圆的颜色:

d3.selectAll("circle").style("color", "red");

关于这个主题的一篇很好的文章是Mike Bostock's 3 Little Circles

对于您的特定问题,您只需要开始访问您的数据(您不会为此使用d3.select )。假设您的数据是一个数组,并简单地对其进行过滤:

代码语言:javascript
复制
var typeAs = data.filter(function(f) { return f.[type A] === 'A'; });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34726017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档