2013-10-27 20 views
1

我最近一直在学习D3,我一直在玩这个symbol map tutorial添加文字到符号地图

我已经尝试了很多事情来获取任何数据显示在符号作为文本,我似乎无法弄清楚如何做到这一点。

好像我需要沿线加

.text(function(d) { return d.properties.population; }) 

一些地方。我试过在各个地方使用.append或.selectAll,但是我无法让它工作。

回答

1

你可以通过两种方式来解决这个问题,你可以使用工具提示或者将地图放在地图上。这些关于this google group conversation等工具提示以及包括这些生物视觉链接的链接的讨论很多:Simple tooltipTooltips as a helper。在bl.ocks例如你已经对准了使用简单的工具提示选项将需要增加2行代码为:

svg.selectAll(".symbol") 
     .data(centroid.features.sort(function(a, b) { return b.properties.population - a.properties.population; })) 
    .enter().append("path") 
     .attr("class", "symbol") 
     .attr("d", path.pointRadius(function(d) { return radius(d.properties.population); })) 
    .append("title") 
     .text(function (d) { return d.properties.name; }); 

要将文本添加到您需要附加一些SVG文本元素的地图。所以你需要设置类似于上面符号块的东西,并计算文本的x和y。这样做可能有更优雅的方式,但这使得它很清楚发生了什么。 x和y由path.centroid来计算,它返回你的点的屏幕坐标。

svg.selectAll("text") 
     .data(centroid.features).enter()  
    .append("text") 
     .attr("x", function (d) { return path.centroid(d)[0]; }) 
     .attr("y", function (d) { return path.centroid(d)[1]; }) 
     .text(function (d) { return d.properties.name; }); 

希望这有助于

您可以在行动,在这个bl.ock看到他们两个。

+0

第二个适用于我,但第一个不工作。 (好吧,它将页面的标题设置为“加利福尼亚”,但我不认为这就是你要做的意思,我不知道它应该怎么说。 – user2926101

+0

这很奇怪,因为它是为我工作看看添加到答案中的bl.ock,它已经可以正常工作了,当你将鼠标悬停在人口圈时,如果你对答案感到满意,那么不要忘了接受它 – user1614080

+0

啊,它正在工作,需要一秒钟才能加载,而我太急躁了;) – user2926101