【问题标题】:d3-tip on dc-js chart disappears upon filtering over 0-valued group过滤 0 值组后,dc-js 图表上的 d3-tip 消失
【发布时间】:2017-04-07 14:38:17
【问题描述】:

我有许多图表,为简单起见,以this example on jsfiddle 为例,其中有一个刷子图表、一个按时间键入的条形图和一个按某些类别键入的行图。此外,我使用d3-tip 库作为工具提示(在上面的链接中,我的提示非常简化版本)。

为了避免在 rowChart 中创建 bar-row,我使用了 dc-js(以及 here 的常见问题解答中概述的假组)。

假组运行良好,未在行图上显示C 类别。

但是,如果我用 0 数据刷了一些月份,当我重置过滤器时(只需单击刷子图表上过滤区域以外的任何地方),行图中的 d3-tip 就会消失。

请注意,如果创建组时没有 fake-grouping-function,则不会出现此问题。

  • 任何解释为什么会发生这种情况?
  • 如何避免这种情况(不丢失remove_empty_bins)?

【问题讨论】:

    标签: dc.js crossfilter


    【解决方案1】:

    虽然您可以互换使用 dc.js 和 d3.js,并且 dc.js 是有意的“泄漏抽象”,但如果您以惯用的 dc.js 方式来做,有些事情会变得更好。

    我有两个建议:

    1. 应用工具提示以响应 dc.js 事件,以便在创建(或重新创建)新图形对象时重新应用它们。
    2. 修改图表时使用chart.selectAll 而不是d3.selectAll

    好的,#2 实际上与这个问题无关,但它确实有助于更好地确定选择范围,以便他们更难错过图表或意外修改页面其他地方的内容。

    实施 #1 看起来像这样:

    month_chart.on('pretransition', function(chart) {
      chart.selectAll('rect.bar').call(month_tip)
        .on('mouseover', month_tip.show).on('mouseout', month_tip.hide);
    });
    loc_chart1.on('pretransition', function(chart) {
      chart.selectAll('g.row').call(loc_tip)
        .on('mouseover', loc_tip.show).on('mouseout', loc_tip.hide);
    });
    

    pretransition 事件在渲染或重绘后立即触发,因此通常是操作 dc 元素的最佳时机。比仅在全球范围内运行代码要好得多。我喜欢设置好一切,然后调用dc.renderAll(),然后让渲染和重绘在以后自行处理。

    特别是,当remove_empty_bins 停止删除它们时这些条被重新添加时,这些事件将拾取它们并重新提示它们。

    你的小提琴叉:https://jsfiddle.net/gordonwoodhull/5feL3gko/4/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2014-09-23
      • 2014-02-28
      相关资源
      最近更新 更多