javascript - 如何在 D3 Js 中将 y 轴(yDomain)值设置为最大值
问题描述
在我的 D3 图表中,如何设置yDomain
为最大值。有什么建议么 ?如果我们看到nov 10
我的line
并且area
正在开箱即用。
我的代码沙箱在这里
我正在分别计算 yDomainMagnitude 和 yDomainStartupMagnitude 的两个域,但现在如何合并或合并两者并分配给 yDomain。
var yDomainMagnitude = d3.extent(data, function(d) {
return d.magnitude;
});
var yDomainStartupMagnitude = d3.extent(data, function(d) {
return d.startupMagnitude;
});
var yDomain = yDomainStartupMagnitude; // here I have to have union of both and assign.
var xScale = d3
.scaleTime()
.range([0, width])
.domain(xDomain);
var yScale = d3
.scaleLinear()
.range([height, 0])
.domain(yDomain);
解决方案
由于您的函数中有一个关系条件,它总是会取较大的值。您可以改为分别计算 和 的两个域startupMagnitude
,magnitude
然后合并范围(分别取最小和最大范围值的最小值和最大值)。
const magnitude = d3.extent(data, d => d.magnitude);
const startup = d3.extent(data, d => d.startupMagnitude);
const yDomain = [
d3.min([magnitude[0], startup[0]]),
d3.max([magnitude[1], startup[1]])
];
或者,一个单一的分配版本,利用你只是联合范围:
const yDomain = d3.extent([
...d3.extent(data, d => d.magnitude),
...d3.extent(data, d => d.startupMagnitude)
]);
还有一个是先合并数据,然后计算范围:
const yDomain = d3.extent([
...data.map(d => d.magnitude),
...data.map(d => d.startupMagnitude)
]);
这些不会将 D3 计算 min/max/extent 的方式与 / 的不同语义混合,例如。如果数组为空,则处理字符串、空值和结果。在这方面,最后一个版本是最忠实于 D3 方式的,因为它使用了单个.Math.min
Math.max
d3.extent
推荐阅读
- python - 使用Regex python提取月份之前的年份
- html - 在 URL HTML 中添加标题
- python - 如何使用相同的方法操作不同实例属性的值
- python - 如何根据熊猫数据框中的其他列进行组合
- r - 如何在 R Shiny 中更改反应小标题中的值
- django - Django - 如何在模板中获取长度和计数命令?(模板中的查询集)
- javascript - Sequelize 仅获取自己的属性,忽略包含的实例
- android - 是否有任何相当于 iOS UIAccessibilityTraits 的 Android 设备?
- jenkins - 我如何在 Jenkins 管道中使用管道脚本文件(管道选项卡)
- r - 在 R 中使用 for 循环