Javascript 如何在D3 Js中将y轴(yDomain)值设置为最大值
在我的D3图表中,如何将Javascript 如何在D3 Js中将y轴(yDomain)值设置为最大值,javascript,d3.js,Javascript,D3.js,在我的D3图表中,如何将yDomain设置为最大值。有什么建议吗? 如果我们在11月10日的myline和area上看到,我们就可以开箱了 我的代码沙箱 我正在分别计算yDomainMagnitude和yDomainStartupMagnitude的两个域,但现在如何合并或合并这两个域并分配给yDomain var yDomainMagnitude = d3.extent(data, function(d) { return d.magnitude; });
yDomain
设置为最大值。有什么建议吗?
如果我们在11月10日的myline
和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 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计算最小值/最大值/范围的方法与Math.min
/Math.max
的方法混合使用,例如处理字符串、空值和数组为空时的结果。在这方面,最后一个版本最忠实于D3方式,因为它使用单个D3。范围因为函数中有一个关系条件,所以它总是取较大的值。您可以分别计算startupMagnitude
和magnitude
的两个域,然后合并范围(分别取最小范围值和最大范围值的最小值和最大值)
或者,单个赋值版本,利用您只需合并扩展数据块:
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计算最小值/最大值/范围的方法与Math.min
/Math.max
的方法混合使用,例如处理字符串、空值和数组为空时的结果。在这方面,最后一个版本最忠实于D3方式,因为它使用单个D3。范围这就是我如何分别计算startupMagnitude和magnitude的两个域,然后比较最大值和最小值并创建yDomain
我不确定这是否正确,或者是否有其他d3方法
var yDomainMagnitude = d3.extent(data, function(d) {
return d.magnitude;
});
var yDomainStartupMagnitude = d3.extent(data, function(d) {
return d.startupMagnitude;
});
var max =
d3.max(d3.values(yDomainMagnitude)) >
d3.max(d3.values(yDomainStartupMagnitude))
? d3.max(d3.values(yDomainMagnitude))
: d3.max(d3.values(yDomainStartupMagnitude));
var min =
d3.min(d3.values(yDomainMagnitude)) <
d3.min(d3.values(yDomainStartupMagnitude))
? d3.min(d3.values(yDomainMagnitude))
: d3.min(d3.values(yDomainStartupMagnitude));
var yDomain = [min, max];
var yDomainMagnitude=d3.范围(数据,函数(d){
返回d.量级;
});
var yDomainStartupMagnitude=d3.范围(数据、功能(d){
返回d.0量级;
});
最大值=
d3.最大值(d3.值(yDomainMagnitude))>
d3.最大值(d3.值(ydomInstartupMagnitude))
? d3.最大值(d3.值(yDomainMagnitude))
:d3.最大值(d3.值(ydomInstartupMagnitude));
var min=
d3.最小值(d3.值(yDomainMagnitude))<
d3.最小值(d3.值(ydomInstartupMagnitude))
? d3.最小值(d3.值(yDomainMagnitude))
:d3.min(d3.values(ydomInstartupMagnitude));
变量yDomain=[min,max];
我就是这样分别计算startupMagnitude和magnitude的两个域,然后比较最大值和最小值并创建yDomain的
我不确定这是否正确,或者是否有其他d3方法
var yDomainMagnitude = d3.extent(data, function(d) {
return d.magnitude;
});
var yDomainStartupMagnitude = d3.extent(data, function(d) {
return d.startupMagnitude;
});
var max =
d3.max(d3.values(yDomainMagnitude)) >
d3.max(d3.values(yDomainStartupMagnitude))
? d3.max(d3.values(yDomainMagnitude))
: d3.max(d3.values(yDomainStartupMagnitude));
var min =
d3.min(d3.values(yDomainMagnitude)) <
d3.min(d3.values(yDomainStartupMagnitude))
? d3.min(d3.values(yDomainMagnitude))
: d3.min(d3.values(yDomainStartupMagnitude));
var yDomain = [min, max];
var yDomainMagnitude=d3.范围(数据,函数(d){
返回d.量级;
});
var yDomainStartupMagnitude=d3.范围(数据、功能(d){
返回d.0量级;
});
最大值=
d3.最大值(d3.值(yDomainMagnitude))>
d3.最大值(d3.值(ydomInstartupMagnitude))
? d3.最大值(d3.值(yDomainMagnitude))
:d3.最大值(d3.值(ydomInstartupMagnitude));
var min=
d3.最小值(d3.值(yDomainMagnitude))<
d3.最小值(d3.值(ydomInstartupMagnitude))
? d3.最小值(d3.值(yDomainMagnitude))
:d3.min(d3.values(ydomInstartupMagnitude));
变量yDomain=[min,max];
有几种方法可以计算yDomain
。显然,您的方法确实有效,但可以大大简化:
var yDomain = [
d3.min(data, d => Math.min(d.magnitude, d.startupMagnitude)),
d3.max(data, d => Math.max(d.magnitude, d.startupMagnitude))
];
该方法分别使用Math.min()
/Math.max()
检查任何数据点的magnity
或startupMagnitude
值较小/较大的值。然后,它利用d3.min()
和d3.max()
计算这些值的全局范围。有几种方法可以就地计算yDomain
。显然,您的方法确实有效,但可以大大简化:
var yDomain = [
d3.min(data, d => Math.min(d.magnitude, d.startupMagnitude)),
d3.max(data, d => Math.max(d.magnitude, d.startupMagnitude))
];
该方法分别使用Math.min()
/Math.max()
检查任何数据点的magnity
或startupMagnitude
值较小/较大的值。然后它利用d3.min()
和d3.max()
来计算这些值的全局范围。我的var max=d3.max(d3.values(数据,函数(d){return d.magnity;});var min=d3.min(d3.values(数据,函数(d){返回d.magnity;}));如何在yDomain中给出这个,你能不能请guideplus一帮助,我正在做一些计算我发布了答案请检查我有var max=d3.max(d3.values(数据,函数(d){return d.magnity;}));var min=d3.min(d3.values(数据,函数(d){返回d.magnity;}));如何在yDomain中给出这个,你能不能请guideplus一帮助,我正在做一些计算我发布了答案请检查是的,但你可以简化一点,对代码进行条件化没有好处-显然代码格式在这个注释中不起作用,所以我将代码示例粘贴到了我的原始答案中。是的,但是你可以简化一点,对代码进行条件化没有任何好处-显然代码格式在这个注释中不起作用,所以我将代码示例粘贴到我的原始答案中。Math.min
和d3.min
等行为不同,因此值得使用其中一种含义,而不必混合它,除非所有这些都是真实的:-