d3.js - 从图表中删除重叠的点
问题描述
工作jsfiddle:
http://jsfiddle.net/kick_out/njerfb49/
我有一个工作散点图,当您从下拉列表中选择一个字母时,名称中带有所选字母的点会改变颜色和大小;但我似乎无法弄清楚如何删除旧点(或完全写在旧点上),这样它们就不会与选定的点重叠。
var changeSelectedColor = function(selPop){
d3.selectAll('circle')
.transition().duration(1500)
.attr("cx",d => xScale(xData(d)))
.attr("cy",d => yScale(yData(d)))
.style("fill",'black')
.attr("r",3.5)
d3.selectAll('circle.selected')
.transition().duration(1500)
.attr("cx",d => xScale(xData(d)))
.attr("cy",d => yScale(yData(d)))
.style('fill','orange')
.attr("r",10)
.style('opacity',100)
}
我已经尝试了 exit().remove() 的几次迭代,但无济于事。请注意,当下拉项更改时,我将所选点上的类属性更改为“已选择”。相关的重绘功能是第 87 行(是的,我可能错误地重绘了;我愿意接受不同的 enter().append() 或 .join() 建议)。
解决方案
我认为您要进行的主要更改是selection
在更新之前过滤,而不是过滤data
:
dots.filter(d => d.Types.includes(sel)).attr("class",'selected')
我还认为添加一个"not-selected"
类(在覆盖上面选择的类之前)将更容易更新两类点:
dots.attr('class', 'not-selected')
最后,我添加了确保重置非选定点的不透明度。在这里拉小提琴。
推荐阅读
- python - 使用 mayavi python 为 points3d 中的每个点分配颜色
- selenium - 无法使用 selenium 3.0.1 和 firefox 版本 61.0.1 调用 firefox gecko 驱动程序 0.20.1
- java - Android - 神秘权限出现在构建清单中
- ubuntu-18.04 - 有线连接在 Ubuntu 18.04 中不起作用
- html - 当屏幕分辨率较小时,背景中的图像会被裁剪
- ios - 如何从 Xamarin 中的以下 NSObject 对象获取正文?
- java - 如何克服 Vaadin ScssCache 创建的堆转储?
- java - 使用 jdbc 时如何调用预先配置的 postgres 函数?
- powershell - Powershell从文件夹中捕获第一个文件名
- javascript - Angular 5 中的 422(无法处理的实体)错误