d3.js - 使用 dc.js 的具有二维和双 x 轴的箱形图
问题描述
dc.js 是否可以绘制图形的两个 x 轴,即一个在下方,一个在上方。一维/ x 轴包含 ab,x 轴上方包含 1(ab 与 a 轴下方)2(ab 与 x 轴下方)。附上一张图片来解释这个观点。如果可能的话,请给一些建议。
问候。
解决方案
至于在箱线图之间添加线条,这是一个可行的 hacky 解决方案。可能需要一些工作才能使其通用。
假设我们['1A', '1B', '2A, '2B', ...]
在名为 的变量中有域 () domain
。
我们可以添加一个pretransition
处理程序,在每隔一个框之后画线:
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,所以可能我遗漏了一些东西。
推荐阅读
- python - 为什么python无法连接到代理?
- javascript - Kendo PDF 无法正确拆分页面
- javascript - res.json 中的相同对象
- django - Django 的 ManyToManyField 和 ManyToManyRel 的区别
- python - 如何在烧瓶中使用来自 sqlite3 的用户布尔值
- azure-spatial-anchors - 使用 azure 空间锚在 Unity-Hololens 中定位您的布局
- r - 如何解析字符串中的数字?
- php - 在下订单后检索产品列表
- vue.js - v-cloak 在加载页面时不会隐藏组件
- reactjs - Typescript 根据变量动态分配泛型类型