【问题标题】:Coloring a map using D3.js使用 D3.js 为地图着色
【发布时间】:2016-06-12 15:52:27
【问题描述】:

我是 StackOverflow 的新手,刚开始使用 D3。 我需要在地图上显示值。我看到this question 和我应该做的很相似。

我想要根据Date 列中的值将国家/地区着色为 CSV,并根据用户选择的年份(单选按钮)。 我该怎么做?

我创建了一个灰度等级并将它们包含在一个数组中,然后我创建了一个方法chooseColor(value),它根据该年国家/地区的值返回正确的颜色。 我认为这不是做这件事最有效的方法......

另外,在我的 CSV 中,并非所有国家/地区都在欧盟。例如,我没有关于俄罗斯的数据,所以我“关闭”了一些国家/地区,在 mouseover 的活动中添加了 if。 但我也会在地图上切掉俄罗斯的一部分,以扩大已知国家。我怎么也能做那件事?

我查看了这些示例:Mike Bostock 在 bl.ocks.org 上的 ChoroplethThreshold Choropleth,但我不知道如何为国家/地区着色...... (我想放链接,但由于我的声誉低,我不能发布超过 2 个链接)

This is my code

我为我糟糕的英语道歉。谢谢大家,

码头

编辑

我承认我没有理解您代码中的某些内容。

  1. 为什么我需要事件on mouseovermouseouthoverrhover 是什么?我以为它们是与this question 相关的事件。但就我而言,我不需要它,不是吗?
  2. 使用array_valuesd 是一样的,对吧?如果我使用darray_values 不会改变,对吧?这是一个愚蠢的问题,但让我很困惑。
  3. 我用这种方式修改了makemap方法。我正确理解如何使用您的代码?

    function makemap(error, europe, desease) { dess = dessease.slice(); 县 = topojson.feature(europe, europe.objects.collection);

    vector = svg.selectAll("path")
        .data(counties.features)
        .enter()
        .append("path")
        .attr("class", "county")
        .attr("id", function(d) { 
            return "coun" + d.properties.indx;
        })
        .attr("d", path)
        .style("fill", function(array_values) {
            return color(array_values[d.country]);
        });
    

在这种情况下,当然有关于d 的错误。对不起,我不知道我错在哪里......

【问题讨论】:

  • 请删除您的功能:选择颜色。或者重构它

标签: javascript d3.js


【解决方案1】:

国家的颜色将取决于一个值。所以颜色是“价值”的函数。为此,您必须根据您的值定义颜色范围:

var color = d3.scale.linear()
                      .domain([mn,mx])      // <--- min and MAX of your value
                      .range(["#ffffff","000000"]);

然后定义您所在国家/地区的颜色:

svg.selectAll(".county")
                  .style("fill", function(array_values) {
                        return color(array_values[d.country]);
                  });

必读:Jerome Cukier - d3: scales, and color

【讨论】:

  • 我按照您的建议修改了代码,但它不起作用。现在这些国家都是黑人,不是基于价值观的灰度。为什么? code
  • 检查您的 [min, MAX] 值。 d.value 是否正确?
  • [min, max] 是正确的,但如果我打印 d.value 我会得到 undefined..从 csv 文件中获取值我错了吗?
  • 没有。此时 d 具有 topojson 值,您在选择范围内:.selectAll("path")。您必须引用 dess 数组,它具有 desseses 值(来自 csv)或您试图表示的内容
  • 可能我在哪里插入代码是错误的。我将代码svg.selectAll(".county") .style("fill", function(d) { console.log(d.value); return color(+d.value); }); 放在vector = svg.selectAll("path") ... .on("mouseout", function(d) { ... }); 之后。或者它是undefined,因为它依赖于year?对不起,我不明白...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多