D3.js D3和x2B;AngularJS:以编程方式在多个SVG上触发笔刷事件

D3.js D3和x2B;AngularJS:以编程方式在多个SVG上触发笔刷事件,d3.js,D3.js,我目前正在开发一个Angular应用程序,我们正在使用D3进行可视化。我有一个要求,我在csv中获得以下格式的数据 y, x1, x2, x3, x4 10, 20, 30, 40, 50 11, 21, 31, 41, 51 brush.on("brush", function() { var ext = brush.extent()

我目前正在开发一个Angular应用程序,我们正在使用D3进行可视化。我有一个要求,我在csv中获得以下格式的数据

y, x1, x2, x3, x4
10, 20, 30, 40, 50
11, 21, 31, 41, 51
brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
使用Angular,我为“散点图”创建了一个指令,该指令接受输入参数-数据(在将上面的CSV解析为JSON之后)、XaxiName和yAxisName

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
我使用该指令绘制了4个散点图,每个散点图一个(x1对y)、(x2对y)、(x3对y)、(x4对y)

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
每个散点图都有笔刷事件并且正在工作

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
我的问题和要求是:当用户在SVG1上刷牙时,如何触发用户在SVG1上选择的相同数据点在SVG2、SVG3、SVG4上刷牙

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
同样,反之亦然,如果用户在SVG3上刷牙,我希望为SVG3上选择的数据点触发在SVG1、SVG2和SVG4上刷牙

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
非常感谢您的帮助

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
更新1:

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
SVG上的my brush事件定义如下。如何选择所有SVG

brush.on("brush", function()
                            {
                                var ext = brush.extent()
                                //  draw dots on scatter plot - if dot is with in brush use radius 9.5 else 3.5
                                svg.selectAll(".dot")
                                    .data(data)
                                    .attr("class", "dot")
                                    .attr("r",
                                    function (d) {if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                        return 9.5;
                                    else
                                        return  3.5;}  )
                                    .attr("cx", xMap)
                                    .attr("cy", yMap)
                                    .style("fill", function (d) {
                                        if (d[xAxisName] > ext[0,0][0] && d[xAxisName] < ext[1,1][0] &&  d[yAxisName] > ext[0,0][1] && d[yAxisName] < ext[1,1][1] )
                                            return "#fff";
                                        else
                                            return color(cValue(d));
                                    });
brush.on(“brush”,function())
{
var ext=brush.extent()
//在散点图上绘制点-如果点在画笔中,则使用半径9.5或3.5
svg.selectAll(“.dot”)
.数据(数据)
.attr(“类”、“点”)
.attr(“r”,
函数(d){if(d[xAxisName]>ext[0,0][0]&&d[xAxisName]ext[0,0][1]&&d[yAxisName]ext[0,0][0]&和d[xAxisName]ext[0,0][1]&和d[yAxisName]
在画笔处理程序中,将通常仅适用于当前SVG的更改应用于其他SVG。感谢您的回答。我用我的画笔事件处理程序更新了我的问题。目前,它查看当前SVG,并在该SVG的画笔区域重新画圆。我想,我需要选择所有SVG并执行same操作。如何选择所有svg?是否有类似d3.selectAll('svg')。select('.dot')?实际上,我刚刚尝试了d3.selectAll('svg')。select('.dot')。最初,所有散点图都正确呈现。当我开始刷SVG2时,它替换了所有其他散点图(SV1、SV3、SVG4)使用SVG2中的项目。您还需要传入适当的
数据
。我正在每个SVG的笔刷处理程序中创建笔刷范围。我需要触发“笔刷”其他SVG通过我为SVG创建的启动画笔事件的相同区段的事件。基本上,如果SVG1正在启动画笔事件,我将创建画笔。区段()并传递此区段并为SVG2、SVG3等的其他SVG触发笔刷事件。此外,在笔刷处理程序中,我需要检查以创建新区段或使用传递的区段。但是,我不知道如何实现。有什么想法吗?