使用 dc.js 的双维度和双 x 轴箱线图

Box plot with dual dimension and dual x-axis using dc.js

是否可以使用 dc.js 绘制图形的两个 x 轴,即一个在下方,一个在上方。 One Dimension/ x 轴包含 a b,x 轴上方包含 1(a b 低于 a 轴)2(a b 低于 x 轴)。附上一张img来解释这个观点。如果可以的话请给点建议。

此致。

至于在箱线图之间添加线条,这里有一个可行的 hacky 解决方案。可能需要一些工作才能使其通用。

假设我们在名为 domain.

的变量中有域 (['1A', '1B', '2A, '2B', ...])

我们可以添加一个 pretransition handler 在每两个框之后画线:

function x_after(chart, n) {
  return (chart.x()(domain[n]) + chart.x()(domain[n+1])) / 2 + chart.margins().left + 7; // why 7?
}

chart.on('pretransition', chart => {
  let divide = chart.g().selectAll('line.divide').data(d3.range(domain.length/2));
  divide.exit().remove();
  divide = divide.enter()
    .append('line')
    .attr('class', 'divide')
    .attr('stroke', 'black')
    .merge(divide);
  divide
    .attr('x1', n => x_after(chart, n*2 + 1))
    .attr('x2', n => x_after(chart, n*2 + 1))
    .attr('y1', chart.margins().top)
    .attr('y2', chart.margins().top + chart.effectiveHeight())
})

这使用 D3 通用更新模式在每隔一个框(特别是那些索引号为奇数的框)之后添加一条垂直线。

它取 1B 和 2A、2B 和 3A 等的 X 位置的平均值。我不知道为什么我必须加 7,所以可能我遗漏了什么。

demo fiddle.