Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在这个NVD3多条形图中更改数据集时,如何缩放Y轴?_Javascript_Json_Nvd3.js - Fatal编程技术网

Javascript 在这个NVD3多条形图中更改数据集时,如何缩放Y轴?

Javascript 在这个NVD3多条形图中更改数据集时,如何缩放Y轴?,javascript,json,nvd3.js,Javascript,Json,Nvd3.js,我正在使用NVD3生成一个多条形/堆叠图表。这是一本书 我正在获取原始数据阵列,将其转换为与nvd3兼容的结构,并为“本年度”(2018年)和“所有年份”维护阵列。顶部的按钮允许您在所有年份和当前年份之间切换 我对结果图表很满意,只有一个例外。如果执行以下步骤,Y轴的缩放不起作用: 1.)加载图表/小提琴 2.)单击顶部图例区域的“团队3”(橙色)标签数次 3.)注意左侧(Y轴)的变化方式,以缩放到产生的最小/最大值 4.)现在单击顶部的“当前年份”按钮(仅显示一年的数据) 5.)再次单击顶部图

我正在使用NVD3生成一个多条形/堆叠图表。这是一本书

我正在获取原始数据阵列,将其转换为与nvd3兼容的结构,并为“本年度”(2018年)和“所有年份”维护阵列。顶部的按钮允许您在所有年份和当前年份之间切换

我对结果图表很满意,只有一个例外。如果执行以下步骤,Y轴的缩放不起作用:

1.)加载图表/小提琴

2.)单击顶部图例区域的“团队3”(橙色)标签数次

3.)注意左侧(Y轴)的变化方式,以缩放到产生的最小/最大值

4.)现在单击顶部的“当前年份”按钮(仅显示一年的数据)

5.)再次单击顶部图例区域的“团队3”(橙色)标签几次。。。当“团队3”被禁用时,Y轴现在根本不缩放以减少最大数量

单击“当前年份/所有年份”按钮时,我正在运行以下命令,我认为这将强制图表完全适应新的数据集,并根据切换的数据和图例项自动设置其Y轴边界:

data = convertedArray; // THE ALTERNATE ARRAY OF DATA
chart.forceY([uniqueDollarAmounts[0], // THE DISTINCT VALUES THAT GOVERN THE Y AXIS AMOUNTS (AND BOUNDS?)
uniqueDollarAmounts2[uniqueDollarAmounts.length-1]]);
d3.select('#NVD3Chart svg').datum(data).call(chart); 

要使禁用“团队3”的Y轴最大值降低到下一个最高团队(团队7)的392710.1值,我需要做什么?我还观察到,当你回到“所有年份”时,它不会像最初那样工作(说到Y轴的缩放)。。。因此,当我转到第二个数据集时,我显然破坏了一些东西。

图表的目的。
强制(…)
实际上与您想要的相反,它确保在过滤显示的数据时Y轴将而不是缩放。对
.datum(data)
的调用基于
数据处理轴和数据的更改。事实上,只要删除这两个实例,Y轴缩放就可以了

$('#sort').click(function() {

    if ($(this).val() == "All Years") {
      $(this).val("Current Year");
        data = convertedArray;
        //chart.forceY([uniqueDollarAmounts[0], uniqueDollarAmounts2[uniqueDollarAmounts.length-1]]);
        d3.select('#NVD3Chart svg').datum(data).call(chart);
        nv.utils.windowResize(chart.update);
        getLowerTeamData()
      }
      else {
        $(this).val("All Years");
          data = convertedArray2;
          //chart.forceY([uniqueDollarAmounts2[0], uniqueDollarAmounts2[uniqueDollarAmounts2.length-1]]);
          d3.select('#NVD3Chart svg').datum(data).call(chart);
          nv.utils.windowResize(chart.update);
          getLowerTeamData()
        }
});
关于您提到的功能的说明:

我还观察到,当你回到“所有年份”时,它不会像最初那样起作用

这是因为第一次加载图表时未使用forceY,因此Y轴将正确缩放。当您返回到“所有年份”时,它会应用(或者更确切地说是尝试应用)
chart.forceY
,而这最初并没有发生,导致出现此问题

这个问题实际上是由于
chart.forceY(..)
无法处理您的初始数据集,这看起来是您的输入错误。仔细看一下第119行:

chart.forceY([uniqueDollarAmounts[0], uniqueDollarAmounts2[uniqueDollarAmounts.length-1]]);
uniqueDollarAmounts2
应该是
uniqueDollarAmounts
,因此
uniqueDollarAmounts2[uniqueDollarAmounts.length-1]
的值是
未定义的。这会导致
.forceY
无法按预期工作,这就是为什么在筛选“
Team3
”时,它仍然显示为缩放

在初始图表上显示
chart.forceY
,并更正打字错误。请注意,在任何情况下过滤数据时,Y轴都不会更改。2018年数据上的最小值不同,因此您会注意到较低的值确实从
0
6641.8
变化,正如您所预期的那样

其中删除了
chart.forceY
的实例。请注意,Y轴现在已适当缩放