d3 中有没有办法不绘制重叠的刻度标签?例如,如果我有一个条形图,但条形图只有 5 像素宽,而标签只有 10 像素宽,我最终会得到一团乱麻。我目前正在研究一种仅在标签不重叠时才绘制标签的实现。我找不到任何现有的方法来做到这一点,但不确定是否有其他人处理过这个问题。
问问题
11491 次
2 回答
1
我在多个(子)轴上遇到了类似的问题,在某些情况下,最后一个刻度与我的垂直轴重叠(取决于屏幕宽度),所以我刚刚写了一个比较结束位置的小函数文本标签的下一个轴的位置。此代码非常适合我的用例,但可以轻松适应您的需求:
var $svg = $('#svg');
// get the last tick of each of my sub-axis
$('.tick-axis').find('.tick:last-of-type').each(function() {
// get position of the end of this text field
var endOfTextField = $(this).offset().left + $(this).find('text').width();
// get the next vertical axis
var $nextAxis = $('line[data-axis="' + $(this).closest('.tick-axis').attr('data-axis') + '"]');
// there is no axis on the very right, so just use the svg width
var positionOfAxis = ($nextAxis.length > 0) ? $nextAxis.offset().left : $svg.offset().left + $svg.width();
// hide the ugly ones!
if (endOfTextField > positionOfAxis) {
$(this).attr('class', 'tick hide');
}
});
带有的刻度color: aqua
是隐藏的:
于 2015-11-26T09:58:06.367 回答