首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HeatMap固定框大小(根据行和列调整heatMap大小)

HeatMap固定框大小(根据行和列调整heatMap大小)
EN

Stack Overflow用户
提问于 2019-02-23 01:46:36
回答 1查看 340关注 0票数 1

我希望我的heatMap根据行数和列数来调整其大小,以便框的大小保持固定大小。

heatMap:

代码语言:javascript
复制
heatMap
  .width(1000)
  .height(400)
  .dimension(dimension)
  .group(filtered_years_group)
  .keyAccessor(function(d) {
    return d.key[0];
  })
  .valueAccessor(function(d) {
    return d.key[1];
  })
  .colorAccessor(function(d) {
    return +d.value.color;
  })
  .title(function(d) {
    return "Manager:   " + d.key[1] + "\n" +
      "FTE:  " + d.value.toolTip + "\n" +
      "Date: " + d.key[0] + "";
  })
  .rowOrdering(d3.descending);

https://jsfiddle.net/_M_M_/wkv1srhd/2/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-23 04:56:30

好的,这里有一个通用的方法。

设置宽度和高度的适当时机是响应preRenderpreRedraw事件。这样,只要行数或列数发生变化,它就会发生变化。

在处理程序中,您可以遍历数据,并使用Set计算数据的行数和列数。

最后,将这些计数乘以所需的大小,并添加边距,以获得所需的图表宽度和高度。(这与图表内部的功能相反。)

我将其放在一个可调整大小的函数中,该函数采用所需的单元格宽度和高度:

代码语言:javascript
复制
function resize_heatmap(cwid, chei) {
  return function(heatMap) {
    var rows = new Set(), cols = new Set();
    heatMap.group().all().forEach(function(kv) {
      cols.add(heatMap.keyAccessor()(kv));
      rows.add(heatMap.valueAccessor()(kv));
    });
    heatMap.width(cols.size * cwid + heatMap.margins().left + heatMap.margins().right)
      .height(rows.size * chei + heatMap.margins().top + heatMap.margins().bottom);
  };
}

使用所需的单元格宽度和高度实例化处理函数,并将其附加到热图,如下所示:

代码语言:javascript
复制
var resize = resize_heatmap(30,30);
heatMap.on('preRender', resize);

经过一些实验,我发现这不适用于.on('preRedraw')as it should。在该问题得到解决之前,您必须覆盖.redraw()

代码语言:javascript
复制
dc.override(heatMap, 'redraw', function() {
  resize(heatMap);
  heatMap._redraw();
});

Fork of your fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54832531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档