【问题标题】:Remove empty groups from dc.js graph从 dc.js 图中删除空组
【发布时间】:2018-04-23 23:27:45
【问题描述】:

我已经完成了关于从dc.js 图表中删除空箱的所有 SO 问题,但除了假组方法之外找不到任何东西

filter_group = function(oldGroup) {
    return {
        all: oldGroup.all().filter(...)
    };
}
newGroup = filter_group(oldGroup);

然后在dc.js 图表中使用newGroup

这对我来说是在第一次绘制时创建正确的垃圾箱集,但当我将过滤器应用于其他维度时它不会重新过滤。所以我最终得到了正确的初始 bin,但在随后的重绘中,我仍然得到了空的 bin。

我想要实现的是适当的重新过滤和重绘,即根据我的过滤器功能摆脱垃圾箱并重绘排除过滤后的垃圾箱,以便拥有不同数量的垃圾箱。

这是一个fiddle,它说明了我的意思。 我已经设置了数据,以便在第一个图中过滤 a 应该删除第二个图中的 g 条(并且在第二个图中过滤 g 应该删除第一个图中的 a 一个) 但它不会从轴上删除空条,它只是显示没有条的标签。

起点:

在第二张图中对g 进行过滤后(我希望a 甚至不在轴上显示):

PS : 我已经标记了 reductiod3.js 以防万一使用这些包有一个优雅的解决方案,即使我宁愿将它保留在 dc.js 中。

【问题讨论】:

  • 我刚刚删除了 Javascript 标记,因为当这些问题有该标记时,它们往往会被否决:( 如果你能分享一个你实际尝试做的例子,那将非常有帮助,什么您正在使用的 dc.js 图表等。一般来说,如果您只想过滤掉空组,我会说假组是最好的选择。但这似乎对您不起作用,我们需要查看更多上下文来帮助您解决问题。也就是说,您的虚假群组使用的是.map 而不是.filter,这一事实可能会导致您的问题。
  • 这只是伪代码。我实际上在我的实际代码中使用了过滤器。会试着想出一个小提琴
  • 谢谢 - 将来,请尝试在您的问题中包含一个真实的工作示例,而不是伪代码。在将问题转换为伪代码时,这种无意的问题(甚至消除实际问题)的引入往往会发生很多:D
  • 在问题中添加了适当的小提琴
  • 抱歉,这个小提琴没有运行 (group is not defined),而且里面似乎没有 remove_empty_bins

标签: d3.js dc.js crossfilter reductio


【解决方案1】:

X 刻度的域决定了显示哪些条形。

您在图表上手动设置域:

.x(d3.scale.ordinal().domain(filter_group(group).all().map(function(d) {return(d.key);}).unshift("")))

我确定您正在解决其他问题,但如果您删除它并指定

.elasticX(true)

相反,您不需要 on("filtered",... 并且图表将在它们的值为零时删除箱。

Fork of your fiddle.

【讨论】:

  • 很好,谢谢。不记得它正在解决的问题,所以会摆脱它!
  • 但我原以为它也会动态重新计算域,就像重新计算假组一样。
  • elasticX 就是这样做的。否则域保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
相关资源
最近更新 更多