gpt4 book ai didi

javascript - 热图矩形内的标签

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:23:54 25 4
gpt4 key购买 nike

我想在框内显示热图框的值,而不仅仅是在工具提示中。

看起来虽然这个功能还没有被添加根据:https://github.com/dc-js/dc.js/issues/1303 ,这可以用 d3.js 完成吗?谢谢。

热图:

        heatMap
.width(1000)
.height(400)
.dimension(dimension)
.group(filtered_heatMap_group)
.margins({
left: 200,
top: 30,
right: 10,
bottom: 50
})
.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_/jvf5ot3p/3/

最佳答案

细节决定成败。

在框上添加一些文本非常容易。让它们很好地定位和格式化将需要更多的工作。无论如何,我会尽力让你开始。

您可以使用 renderlet 事件。 pretransition 会更好,但我们需要从 rect 中窃取一些属性,因为图表的比例不可访问,并且这些属性并未在 中全部初始化>过渡前时间。

这是 dc.js 中注释的常见模式:WAITING图表事件,然后选择现有元素并向其添加内容。元素选择器是 documented here ;我们需要 g.box-group

其余的是标准的 D3 通用更新模式,除了正如我提到的,我们无法访问比例尺。我们可以读取 xywidthheight< 等属性,而不是试图复制该语言并可能弄错它 来自已经驻留在这些 g 中的 rect

SVG 没有多行文本,所以我们必须创建 tspan text 中的元素元素。

综合起来:

  .on('renderlet.label', function(chart) {
var text = chart.selectAll('g.box-group')
.selectAll('text.annotate').data(d => [d]);
text.exit().remove();
// enter attributes => anything that won't change
var textEnter = text.enter()
.append('text')
.attr('class', 'annotate')
textEnter.selectAll('tspan')
.data(d => [d.key[1], d.value.toolTip, d.key[0]])
.enter().append('tspan')
.attr('text-anchor', 'middle')
.attr('dy', 10);
text = textEnter.merge(text);
// update attributes => position and text
text
.attr('y', function() {
var rect = d3.select(this.parentNode).select('rect');
return +rect.attr('y') + rect.attr('height')/2 - 15;
});
text.selectAll('tspan')
.attr('x', function() {
var rect = d3.select(this.parentNode.parentNode).select('rect');
return +rect.attr('x') + rect.attr('width')/2;
})
.text(d => d);
})

请注意,我放弃了并将文本向上轻推了 15 像素......可能有也可能没有更好的方法来使多行文本垂直居中。

即使没有描述,文本也不太合适。我会让你弄明白的。

但它在那里并且正确更新:

labels in heatmap screenshot 2

Fork of your fiddle .

关于javascript - 热图矩形内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54775444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com