Javascript SVG使用黑色填充而不是映射颜色
我有一个包含许多svg矩形的绘图。大多数情况下,我都能很好地进行绘图和填充,但初始矩形不像我的彩色地图中那样是蓝色的:Javascript SVG使用黑色填充而不是映射颜色,javascript,d3.js,Javascript,D3.js,我有一个包含许多svg矩形的绘图。大多数情况下,我都能很好地进行绘图和填充,但初始矩形不像我的彩色地图中那样是蓝色的: var colorMap = { 0: "blue", 1: "red", 2: "yellow", }; console.log()显示传递了正确的整数,并且对象关联了正确的颜色。我的csv中的其他列是浮点数,但我的颜色贴图的值是整数。该列的标题为id,并采用3个值中的1个:0、1或2 我已经读到,当数字是浮点而不是整数时,可能会发生此错误。但据我所知,它们都是
var colorMap = {
0: "blue",
1: "red",
2: "yellow",
};
console.log()
显示传递了正确的整数,并且对象关联了正确的颜色。我的csv中的其他列是浮点数,但我的颜色贴图的值是整数。该列的标题为id
,并采用3个值中的1个:0、1或2
我已经读到,当数字是浮点而不是整数时,可能会发生此错误。但据我所知,它们都是整数。即使我的0条目不是一个整数(无论出于什么原因),为什么该列中的所有其他条目都工作正常?让D3将某些数字识别为浮点数,而将其他数字识别为同一精确列中的整数,这将非常违反直觉
也许这根本不是关于整数/浮点数的问题,我可能忽略了其他东西吗?在JavaScript(以及我所知道的所有语言)中,0
是错误的,也就是说,它的计算结果是false
。这些措施包括:
false
null
未定义
- 0
NaN
- “”(空字符串)
.style('fill', function(d) {
var colorID = d.id;
if (colorID) {
return colorMap[colorID];
}
});
。。。当colorID
为零时,将计算为false
,因此当d.id
为零时,将避免使用colorMap
解决方案:放下它:
.style('fill', function(d) {
return colorMap[d.id];
});
或者,如果您只是想检查财产是否存在:
.style('fill', function(d) {
var colorID = d.id;
if (colorID != undefined) {
return colorMap[colorID];
}
});
这是您更新的bl.ocks:您尝试过使用十六进制值而不是颜色名称吗?这真的很有趣,谢谢您提醒我。我把它放在那里是为了避免其他数据集出现na错误,现在我想我将使用
=如您所建议的,未定义。