gpt4 book ai didi

javascript - 带图例的 D3 等值线图

转载 作者:数据小太阳 更新时间:2023-10-29 04:38:42 24 4
gpt4 key购买 nike

我有一张显示美国总人口的等值线图。我想在 map 上添加一个显示分位数范围值的图例。我已经看到关于这个主题的其他类似问题,但似乎无法让它适用于我的具体案例。我知道我需要包括颜色范围或颜色域,但不确定这是否是正确的方法。截至目前,图例中只显示一个特征,是否所有图例特征都堆叠在一起。我怎么才能确定以及如何解决这个问题。

//Define default colorbrewer scheme
var colorSchemeSelect = "Greens";
var colorScheme = colorbrewer[colorSchemeSelect];

//define default number of quantiles
var quantiles = 5;

//Define quantile scale to sort data values into buckets of color
var color = d3.scale.quantile()
.range(colorScheme[quantiles]);

d3.csv(data, function (data) {
color.domain([
d3.min(data, function (d) {
return d.value;
}),
d3.max(data, function (d
return d.value
})
]);

//legend
var legend = svg.selectAll('rect')
.data(color.domain().reverse())
.enter()
.append('rect')
.attr("x", width - 780)
.attr("y", function(d, i) {
return i * 20;
})
.attr("width", 10)
.attr("height", 10)
.style("fill", color);

最佳答案

如果您有一个序数标度,您正在使用的图例代码将非常有效,其中域由与一对一颜色范围相关的离散值组成- 一个基础。但是您使用的是分位数,因此需要不同的方法。

对于 d3 quantile scale ,域是所有可能输入值的列表,范围是离散输出值的列表。域列表按升序排序,然后分成大小相等的组,这些组分配给范围中的每个输出值。组数由输出值的个数决定。

考虑到这一点,为了获得每种颜色的一个图例条目,您将需要使用色标的范围,而不是域作为图例的数据。然后你可以使用 quantileScale.invertExtent() 查找使用该颜色绘制的最小和最大输入值的方法。

示例代码,使每个图例条目成为 <g>包含彩色矩形和显示相应值的文本标签。

var legend = svg.selectAll('g.legendEntry')
.data(color.range().reverse())
.enter()
.append('g').attr('class', 'legendEntry');

legend
.append('rect')
.attr("x", width - 780)
.attr("y", function(d, i) {
return i * 20;
})
.attr("width", 10)
.attr("height", 10)
.style("stroke", "black")
.style("stroke-width", 1)
.style("fill", function(d){return d;});
//the data objects are the fill colors

legend
.append('text')
.attr("x", width - 765) //leave 5 pixel space after the <rect>
.attr("y", function(d, i) {
return i * 20;
})
.attr("dy", "0.8em") //place text one line *below* the x,y point
.text(function(d,i) {
var extent = color.invertExtent(d);
//extent will be a two-element array, format it however you want:
var format = d3.format("0.2f");
return format(+extent[0]) + " - " + format(+extent[1]);
});

关于javascript - 带图例的 D3 等值线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838013/

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