javascript - elasticitY(true) with range 图表不适应新范围

标签 javascript d3.js dc.js

我刚刚开始使用基于此的 dc.js example我用我的数据调整了它。

我希望 y 轴根据预览范围图的选择进行调整。为此,我将 elasticY(true) 添加到主图表中。 如果我在示例中执行此操作,它会按预期工作( see codepen ),但是,如果我使用调整后的代码( see codepen ),则 y 轴根本不会调整。

var chart = dc.lineChart("#chart")
var rangeChart = dc.lineChart("#range-chart")
var domain = [data[0].date, data.slice(-1)[0].date]
var dimension = crossfilter(data).dimension(function(d) {
   return d.date;
})
var group = dimension.group().reduceSum(function(d) {
   return d.value;
});

rangeChart
  .height(80)
  .dimension(dimension)
  .group(group)
  .x(d3.scaleTime().domain(domain))
  .xUnits(d3.timeDay)
  .render();

chart
  .height(220)
  .dimension(dimension)
  .group(group)
  .rangeChart(rangeChart)
  .x(d3.scaleTime().domain(domain))
  .xUnits(d3.timeDay)
  .brushOn(false)
  .mouseZoomable(true)
  .zoomScale([1, 100])
  .zoomOutRestrict(true)
  .renderVerticalGridLines(true)
  .elasticY(true)
  .transitionDuration(100)
  .render();

最佳答案

如果放大图表的最左侧,您可以看到它会自动调整 Y 域的顶部,而不是底部。

该问题在 GitHub 问题 Stack mixin charts' y-domain is always [0, n] when elasticY(true) 中进行了描述。 .

这里的最佳行为是有争议的,因为标准建议是在图表中显示 0 以免夸大。它们都是有效的,因此如果我们更改它,我们仍然必须提供 [0,n] 行为作为选项。

该问题提供了解决方法:

function nonzero_min(chart) {
  dc.override(chart, 'yAxisMin', function () {
    var min = d3.min(chart.data(), function (layer) {
      return d3.min(layer.values, function (p) {
        return p.y + p.y0;
      });
    });
    return dc.utils.subtract(min, chart.yAxisPadding());
  });
  return chart;
}
nonzero_min(chart);

将其应用到您的图表中,确实会显示更多详细信息,因此这里是一个不错的选择:

zoomed min and max

Fork of your pen .

关于javascript - elasticitY(true) with range 图表不适应新范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53615288/

相关文章:

javascript - 交互式图表(由 dc.js 提供)无法正确相互更新

javascript - 使用 jQuery .load 函数刷新元素而不重复它

javascript - 使用 JQuery onblur 设置文本框值

javascript - 如何更改D3中x轴的标签

javascript - d3.js 网格线悬在 x 轴上?

javascript - 为什么我的 dc-js 轴显示得这么粗,而刷子过滤器显示为不透明的黑色?

javascript - jsReport 如何使用AJAX GET请求动态获取数据?

javascript - 每个点有多条线

javascript - svg "use"标签显示一个颠倒的 svg 图标

javascript - 从 dc.js 图表访问过滤/剪辑数据