在鼠标悬停和双工具提示上链接两个元素

Linking two elements on mouseover and dual tooltips

我正在寻找有关如何让可视化中的两个元素(由公共数据值链接)同时响应的建议。

这是现在的可视化效果。 http://bl.ocks.org/natemiller/2686e5c0d9a1a4bb0895

请注意,不同颜色的点代表 2005 年(绿色)和 2013 年(蓝色)的美国 50 个州,因此每个州都有一个蓝点和一个绿点。我有两件事想在这里工作。

  1. 我希望能够将鼠标悬停在蓝点或绿点上并突出显示相应的点(对于相同的状态)。
  2. 我希望在两个点旁边显示一个带有一些基本数据的工具提示,以提供特定于点的数据。

关于上面的第一点。现在,当您将鼠标悬停在一个蓝点上时,相应的绿点会突出显示,但是,当您将鼠标悬停在一个绿点上时,只会突出显示该点,而不是其相应的蓝点。我想这是一个简单的修复,但对于我来说,我无法想出反转引用,所以我也将绿色引用变成蓝色引用。

关于第二点。现在,鼠标悬停点附近会出现一个带有相关信息的工具提示,但我希望在隔年数据的相应点旁边出现一个类似的工具提示,这样跨年的直接比较就更容易了。我对添加 HTML 工具提示很陌生,所以我不清楚如何执行此操作,并怀疑它可能需要一种新方法来添加工具提示。关于如何在鼠标悬停的元素和相应的链接元素附近显示工具提示,有什么帮助可以指导我正确的方向吗?

不能有多个具有相同 ID 的元素。使用 class .circleHawaii 而不是 id #circleHawaii.

1) 请记住,ID 是唯一的,并且您正在创建多个具有相同 ID 的圈子,请改用 class

circles.attr("class", function(d) { return d.state })

2) 您正在创建一个工具提示,如果您想为每对状态显示一个工具提示,请创建多个工具提示

假设您进行了这些更改,您可以轻松地为每对状态创建多个工具提示

circles.on('mouseover', function (d) {
  // selection for 2 states
  var states = d3.selectAll('circle.' + d.state)
  // code to style those nodes goes here ...

  // tooltips for the states
  var tooltips = d3.select('svg').selectAll('text.tooltip')
    .data(states.data())

  // initial styling of the tooltips goes here...
  tooltips
    .enter()
    .append('text')
    .attr('class', 'tooltip')

  // update
  tooltips
    .html(function (d) {
      // text of the tooltip
      return 'something'
    })
    // positioning, it requires some margin fixes I guess
    .attr('x', function (d) { return xScale(d.child_pov) })
    .attr('y', function (d) { return yScale(d.non_math_prof) })
})

最终删除触发 mouseout 事件时在鼠标悬停时创建的工具提示

circles.on('mouseout', function (d) {
  d3.select('svg').selectAll('text.tooltip').remove()
})