D3js工具提示无法正确生成

时间:2013-04-24 16:53:46

标签: javascript d3.js tooltip

我的条形图非常好。但仍有一些调整。我有问题让条形标签正确对齐&在添加额外数据等时仍然保持响应

所以我决定放弃那些标签并在鼠标悬停上做一个工具提示。但我发现它没有填充正确的数据。它只为绿色条(全局)填充它。当我鼠标悬停在蓝色(本地)栏上时,我得到相同的工具提示,其值来自全局。

似乎它正在为整个集合生成工具提示,而不是单个条形图。

问题#1 如何让它为单个条形码生成正确的数据,而不是整个集合?

问题#2 如何在工具提示中包含多个值。您可以从我的小提琴中看到,它目前仅指定CPC,而不是为搜索量生成数据。工具提示只能拉动一条动态数据吗?这似乎不对。

JSFiddle is Here

sets.append("rect")
   .attr("class","local")
.attr("width", xScale.rangeBand()/2)
.attr("y", function(d) {
    return yScale(d.local);
 })
    .attr("x", xScale.rangeBand()/2)
    .attr("height", function(d){
    return h - yScale(d.local);
    })
.attr("fill", colors[0][1])
.on("mouseover", function(d,i) {
    //Get this bar's x/y values, then augment for the tooltip
    var xPosition = parseFloat(xScale(i) + xScale.rangeBand() );
    var yPosition = h / 2;
    //Update Tooltip Position & value
    d3.select("#tooltip")
        .style("left", xPosition + "px")
        .style("top", yPosition + "px")
        .select("#cpcVal")
        .text(d.cpc)
        .select("#volVal")
        .text(d.local);
    d3.select("#tooltip").classed("hidden", false);
})
.on("mouseout", function() {
    //Remove the tooltip
    d3.select("#tooltip").classed("hidden", true);
})
;

sets.append("rect")
    .attr("class","global")
.attr("width", xScale.rangeBand()/2)
.attr("y", function(d) {
    return yScale(d.global);
})
    .attr("height", function(d){
    return h - yScale(d.global);
    })
.attr("fill", colors[1][1])
.on("mouseover", function(d,i) {
    //Get this bar's x/y values, then augment for the tooltip
    var xPosition = parseFloat(xScale(i) + xScale.rangeBand() );
    var yPosition = h / 2;
    //Update Tooltip Position & value
    d3.select("#tooltip")
        .style("left", xPosition + "px")
        .style("top", yPosition + "px")
        .select("#cpcVal")
        .text(d.cpc)
        .select("#volVal")
        .text(d.global);
    d3.select("#tooltip").classed("hidden", false);
})
.on("mouseout", function() {
    //Remove the tooltip
    d3.select("#tooltip").classed("hidden", true);
})
;

1 个答案:

答案 0 :(得分:1)

您的两个问题的根源在于如何设置要显示的数据。首先选择具有特定ID的元素,设置文本然后选择另一个ID。第二个选择失败,因为具有第二个ID的元素不是具有第一个ID的元素的子元素。您可以通过再次呼叫d3.select("#tooltip")而不是链接呼叫来轻松解决此问题。也就是说,替换

d3.select("#tooltip")
    .style("left", xPosition + "px")
    .style("top", yPosition + "px")
    .select("#cpcVal")
    .text(d.cpc)
    .select("#volVal")
    .text(d.local);

d3.select("#tooltip")
    .style("left", xPosition + "px")
    .style("top", yPosition + "px")
    .select("#cpcVal")
    .text(d.cpc);
d3.select("#tooltip")
    .select("#volVal")
    .text(d.local);

在它出现的两个地方都应该看到正确的值。