如何删除d3.js图例中的白色(空格)?我定义了一个色标范围,它的工作完美,除了它增加了白色之间的值。下面是一个示例https://jsfiddle.net/aba2s/u46xoh97/1/
function drawLinkLegend(colorscale, min, max) {
linkLabel.style.display = 'block'
var legendWidth = 100
legendMargin = 10
legendLength = document.getElementById('legend-links-container').offsetHeight - 2*legendMargin
var legendSvg = d3.select('#legend-links-svg')
.append('g')
.attr("id", "linkLegendSvg");
var dif = colorscale.domain()[1] - colorscale.domain()[0];
var intervals = d3.range(400).map(function(d,i) {
return dif * i / 400 + colorscale.domain()[0]
})
intervals.push(colorscale.domain()[1]);
var intervalHeight = legendLength / intervals.length;
var bars = legendSvg.selectAll(".bars")
.data(intervals)
.enter().append("rect")
.attr("class", "bars")
.attr("x", 0)
.attr("y", function(d, i) { return Math.round((intervals.length - 1 - i) * intervalHeight) + legendMargin; })
.attr("height", intervalHeight)
.attr("width", legendWidth-50)
.style("fill", function(d, i) { return colorscale(d) })
.attr("stroke-width",0)
var legendAxis = d3.scaleLinear()
.domain([min, max])
.range([legendLength, 0]);
legendSvg.append("g")
.attr("class", "legend axis")
.attr("transform", "translate(" + (legendWidth - 50) + ", " + legendMargin + ")")
.call(d3.axisRight().scale(legendAxis).ticks(10))
}
2条答案
按热度按时间8wigbo561#
白色的线条来自白色的背景,每个元素的高度太小,或者svg无法呈现十进制的高度,然后背景就到了前面。
您可以使用(向上舍入)解决此问题:
https://jsfiddle.net/falkedesign/1am0b3xu/
dwthyt8l2#
在创建图例时,您为每个图例色块设置了
intervalHeight
的高度,并根据intervalHeight
计算了每个图例块的放置位置的y
属性,但是,您对计算的y
属性进行了舍入,这有时会使y
值高于应有值,导致间隙。要解决这个问题,可以将
y
修改为没有四舍五入,或一个整洁的解决方案,我发现是使高度只是大了一点,以桥梁的差距正在设置
这样一来,每一条的高度都有点太高了,但无论如何都会被下一条所掩盖。唯一的视觉差异是白色间隙不再存在。