如何使用geoChoroplethChart和dc.js在Mapchart的路径上添加标签或自定义值?

阿舒托什·库马尔·夏尔马

在此处输入图片说明

var IndChart = dc.geoChoroplethChart("#india-chart");

var states = data.dimension(function (d) {
            return d["state_name"];
        });

var stateRaisedSum = states.group().reduceSum(function (d) {
            return d["popolation"];
        });

     IndChart
                        .width(700)
                        .height(500)
                        .dimension(states)
                        .group(stateRaisedSum)
                        .colors(d3.scale.ordinal().domain().range(["#27AE60", "#F1C40F", "#F39C12","#CB4335"]))
                        .overlayGeoJson(statesJson.features, "state", function (d) { //console.log(d.properties.name);
                            return d.id;
                        })
                        .projection(d3.geo.mercator().center([95, 22]).scale(940))
                        .renderLabel(true)
                         .title(function (d) { console.log(d); return d.key + " : " + d.value ;
                        })
                        .label(function (d) { console.log(d);}) ;

想要使用dc.js在地图中为每个路径添加标签或自定义值(25%,在地图截图中添加)。

高登

在上面的评论中,您找到或创建了一个可以回答原始问题的示例然后,您问如何使它适用于同一页面上的两个图表。

这只是使选择器正确设置的问题,并且还了解dc.js如何呈现和重新绘制工作。

首先,那个例子

var labelG = d3.select("svg")

它将始终选择svg页面上的第一个元素。您可以通过使选择器更具体(例如#us-chart svg和)来解决此问题#us-chart2 svg,但是我更喜欢使用chart.select()函数,该函数在特定图表的DOM树中进行选择。

接下来,请务必记住,渲染图表时,它将删除所有内容并从头开始。本示例调用dc.renderAll()两次,因此对第一张图表所做的任何修改都将在第二张渲染图上丢失。

相反,更改任何过滤器都会发生重绘,并且它会逐渐更改图表,并保留先前的内容。

我更喜欢听dc.js图表​​事件,然后进行修改。这样,每次绘制或重绘图表时,都可以进行修改。

特别是,我尝试尽可能地使用该pretransition事件来修改图表。这是在绘制后立即发生的,因此您有机会进行更改而不会出现任何故障或暂停。

始终在绘制图表之前添加事件侦听器。

为两个图表添加(相同)处理程序,然后进行渲染,如下所示:

    usChart.on('pretransition', function(chart) {
        var project = d3.geo.albersUsa();

        var labelG = chart.select("svg")
            .selectAll('g.Title')
              .data([0])
            .enter()
            .append("svg:g")
            .attr("id", "labelG")
            .attr("class", "Title");

        labelG.selectAll("text")
            .data(labels.features)
            .enter().append("svg:text")
            .text(function(d){return d.properties.name;})
            .attr("x", function(d){return project(d.geometry.coordinates)[0];})
            .attr("y", function(d){return project(d.geometry.coordinates)[1];})
            .attr("dx", "-1em");
    });

    usChart2.on('pretransition', function(chart) {
        var project = d3.geo.albersUsa();

        var labelG = chart.select("svg")
            .selectAll('g.Title')
              .data([0])
            .enter()
            .append("svg:g")
            .attr("id", "labelG")
            .attr("class", "Title");

        labelG.selectAll("text")
            .data(labels.features)
            .enter().append("svg:text")
            .text(function(d){return d.properties.name;})
            .attr("x", function(d){return project(d.geometry.coordinates)[0];})
            .attr("y", function(d){return project(d.geometry.coordinates)[1];})
            .attr("dx", "-1em");
    });
    dc.renderAll();

我在那里使用了另外一个技巧:由于pretransition渲染和重绘都发生了,但是我们只想添加一次这些标签,所以我使用这种模式:

        .selectAll('g.Title')
          .data([0])
        .enter()
        .append("svg:g")
        .attr("class", "Title");

这是最简单的数据绑定:它说我们想要一个,g.Title而它的数据就是value 0由于我们为g元素提供了Title类,因此可以确保仅添加一次该元素。

最后,该表达式的结果是回车选择,因此我们仅textTitle图层为新图层时才添加元素

你的小提琴的叉子

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用图像和标签制作自定义UIBarButtonItem?

如何在JavaScript中使用自定义值和轴标签创建自定义柱形折线图?

Joint.js使用路径类添加自定义端口。用于自定义元素

使用chrome自定义标签时,是否可以添加自定义请求标头?

MPAndroidChart:如何自定义条值标签

如何在d3.js中添加自定义刻度标签?

如何使用充气城堡在CSR中添加自定义OID和值

如何在X轴上设置自定义标签?

如何从Angular中的自定义标签获取属性值

如何通过dc.js中任意维度的自定义值过滤记录?

如何在PyYaml中添加自定义嵌套标签?

在使用熊猫制作的地块上添加标签和标题

如何添加自定义菜单项以快速添加自定义标签

如何在栏上设置自定义标签?

如何在iOS中的自定义tableviewcell中的图像上添加文本标签

添加标签和自定义帖子元

如何将自定义数据注释添加到dc.js图表?

如何从轴添加/删除自定义标签

使用路径在Android的画布上绘制自定义形状

在simple_form select和默认选项上添加自定义标签

如何自定义(或向之添加路径)ember.js Ember Data RESTful URI?

如何自定义添加在情节提要上的标签栏项

使用 d3 和 dc.js 自定义时间线刻度

在 plotly sankey 图中添加标签和自定义节点

如何添加自定义 HTML 标签 TSX

如何使用/实现输入标签和自定义 jsx 标签以使用 Highlight.JS 进行语法高亮显示?

Konva JS - 如何使用输入值添加自定义形状

如何添加标签与 tmaps 标签中的值相结合

如何在 PowerShell 自定义对象道具值返回上添加日期格式?