Javascript 如何在D3 Js中将y轴(yDomain)值设置为最大值

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; });

在我的D3图表中,如何将
yDomain
设置为最大值。有什么建议吗? 如果我们在11月10日的
my
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 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
等行为不同,因此值得使用其中一种含义,而不必混合它,除非所有这些都是真实的:-