Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 改变地图上的颜色D3_Javascript_Json_D3.js - Fatal编程技术网

Javascript 改变地图上的颜色D3

Javascript 改变地图上的颜色D3,javascript,json,d3.js,Javascript,Json,D3.js,我是Js的初学者,我正在尝试使用D3.Js通过Id更改特定国家的颜色(函数colorCountry)。然而,我选择什么颜色并不重要。结果将始终以橙色亮显地图。我能做些什么来解决这个问题 我的代码如下 谢谢 json文件可在此处下载- 身体{ 背景:#FCFA; } .中风{ 填充:无; 行程:#000; 笔画宽度:3px; } .填充{ 填充:#fff; } .分划{ 填充:无; 行程:777; 笔划宽度:.5px; 笔画不透明度:.5; } .土地{ 填充:#888; } .边界{ 填充:无

我是Js的初学者,我正在尝试使用D3.Js通过Id更改特定国家的颜色(函数colorCountry)。然而,我选择什么颜色并不重要。结果将始终以橙色亮显地图。我能做些什么来解决这个问题

我的代码如下

谢谢

json文件可在此处下载-


身体{
背景:#FCFA;
}
.中风{
填充:无;
行程:#000;
笔画宽度:3px;
}
.填充{
填充:#fff;
}
.分划{
填充:无;
行程:777;
笔划宽度:.5px;
笔画不透明度:.5;
}
.土地{
填充:#888;
}
.边界{
填充:无;
冲程:#fff;
笔划宽度:.5px;
}
var countryCode=840//36:澳大利亚*643:俄罗斯*76:巴西*840:美国
可变宽度=960,
高度=580;
var color=d3.scale.category10();
var projection=d3.geo.mercator()
.比例尺(170)
.translate([宽度/2,高度/2])
.精度(.1);
var path=d3.geo.path()
.投影(投影);
var graticule=d3.geo.graticule();
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
svg.append(“defs”).append(“path”)
.datum({type:“Sphere”})
.attr(“id”、“球体”)
.attr(“d”,路径);
追加(“使用”)
.attr(“类”、“笔划”)
.attr(“xlink:href”,“#sphere”);
追加(“使用”)
.attr(“类”、“填充”)
.attr(“xlink:href”,“#sphere”);
追加(“路径”)
.基准面(分划)
.attr(“类别”、“分划”)
.attr(“d”,路径);
d3.json(“world-110m2.json”,函数(错误,world){
如果(错误)抛出错误;
var countries=topojson.feature(world,world.objects.countries).features,
邻居=topojson.neights(世界、对象、国家、几何体);
svg.selectAll(“.country”)
.数据(国家)
.enter().insert(“路径”,“分划”)
.attr(“类别”、“国家”)
.attr(“d”,路径)
.style(“fill”,函数(d){if(d.id==countryCode){返回颜色(colorCountry(d,d.id));};
svg.insert(“路径”,“分划”)
.datum(topojson.mesh(world,world.objects.countries,函数(a,b){返回a!==b;}))
.attr(“类别”、“边界”)
.attr(“d”,路径);
console.log(“值:+countries[99].id”);
log(“值:+countries[12].id”);
console.log(“值:+countries[108]。颜色);
});
/*这里*/
函数颜色国家(国家,国家ID){
如果(country.id==countryId){
返回颜色(country.color=“#FF0000”);
}
}
d3.选择(self.frameElement).style(“height”,height+“px”);

不要对国家/地区路径执行此操作:

.style("fill", function(d) {
    if (d.id == countryCode) { //there is no need for a condition.
        return color(colorCountry(d, d.id));//this is buggy, not clear what you trying to achieve. Color scale already return a color for the country id.
    }
}); 
这样做

.style("fill", function(d) {return color( d.id); });

工作代码。

我对d3不是很熟悉,但如果这行中有s,则似乎有太多的

.style("fill", function(d) { if (d.id == countryCode) { return color(colorCountry(d, d.id));} });
如果您只是这样做,会更简单:

.style("fill", colorCountry);
并将
colorCountry
功能更改为

function colorCountry(country) {
    if (country.id == countryCode) {
        return '#FF0000';
    } else {
        return color(country.id);
    }
}
或者干脆把
colorCountry
函数全部去掉,然后使用它

.style("fill", function(d) {
    return (d.id == countryCode) ? '#FF0000' : color(d.id);
});

但是为什么不更新JSON数据呢?

Hi,谢谢。更新JSON数据是什么意思?我的意思是你使用JSON数据构建地图,更新需要的国家以获得正确的颜色代码不是更容易吗?颜色代码将根据外部数据而变化。我会做推特情绪分析,因此颜色会根据每个国家的支持/拒绝人数而变化。
.style("fill", function(d) {
    return (d.id == countryCode) ? '#FF0000' : color(d.id);
});