0

我从一个数据集创建了一个条形图。我还创建了一个圆形对象,我想将其用作按钮。在圆圈中的 mousedown 上,我想更改用于条形图的数据集,然后重新绘制图形。我尝试将 mousedown 处理程序添加为函数,但单击时数据集不会更改。这是矩形的原始 selectAll:

 svg.selectAll("rect")
         .data(data)
         .enter() 
         .append("rect")
         .attr("x", function(d, i) {
             return i * (width / data.length);})
         .attr("y", function(d) { 
             return 100 - d ;})
         .attr("width", function(d,i) {
              return barWidth ;})
         .attr("height", function(d) {
            return 150 - (100 - d);
         });

这是我在下面渲染的圆圈(我想成为一个切换按钮):

  svg.append("circle")
        .attr("cx", 525)
        .attr("cy", 275)
        .attr("r", 45)
        .attr("stroke", "white")
        .attr("fill", "#660066")
        .attr("opacity", "0.7")
        .on("mouseover", function(){d3.select(this)
            .style("opacity", "1");
          })
        .on("mouseout", function(){d3.select(this)
            .style("opacity", "0.7");
          })
        .on("mousedown", function() {
          // handle event here
        });

我尝试将 svg.selectAll("rect") 直接复制到 mousedown 函数中,并将数据重新绑定到不同的预定义数据集。我还尝试在 .on“mousedown”函数中重新定义该数据集,但条形图仍然没有重绘。将 mousedown 分离为我在 svg.append("circle") 之外调用的单独函数也不起作用。我的猜测是问题在于我试图通过处理另一个绘制对象来更改一个绘制对象,但我觉得必须有某种方法来解决这个问题。任何意见是极大的赞赏。

4

2 回答 2

0

如果您显示您的确切问题或jsfiddle工作,我可能会尝试找到问题

结构和流程一定是这样的

两个SVG circlebar graph

两个功能

function drawgraph(var dataset)
{
//draw graph with this dataset
}

 function drawcircle()
{
//using `d3.js` draw circle
// and in .mousedown call the drawgraph(dataset)
}

方法很简单

将 svg 和代码分开,不要将两者结合起来..

于 2013-11-07T07:35:34.803 回答
0

代码必须与此类似。

var rects = svg.selectAll("rect")
               .data(data)
               .enter() 
               .append("rect")
               .attr("x", function(d, i) {
                  return i * (width / data.length);})
               .attr("y", function(d) { 
                  return 100 - d ;})
               .attr("width", function(d,i) {
                  return barWidth ;})
               .attr("height", function(d) {
                  return 150 - (100 - d);
            });

svg.append("circle")
    .attr("cx", 525)
    .attr("cy", 275)
    .attr("r", 45)
    .attr("stroke", "white")
    .attr("fill", "#660066")
    .attr("opacity", "0.7")
    .on("mouseover", function(){d3.select(this)
        .style("opacity", "1");
      })
    .on("mouseout", function(){d3.select(this)
        .style("opacity", "0.7");
      })    
    .on("click", function() {
        rects.data(newdata)
             .enter() 
             .attr("x", function(d, i) {
                 return i * (width / data.length);})
             .attr("y", function(d) { 
                 return 100 - d ;})
             .attr("width", function(d,i) {
                 return barWidth ;})
             .attr("height", function(d) {
                 return 150 - (100 - d);
             });
      });
于 2013-11-07T07:56:43.987 回答