57

我正在尝试将图表的 y 轴范围设置为 1-100。

查阅了 API 文档并找到了一个可能的解决方案,如此处所示 https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

但是,使用该选项不起作用。进一步阅读上面在axis.tickSize下链接的文档页面,发现以下行

结束刻度由关联比例的域范围确定,并且是生成的路径域的一部分,而不是刻度线

因此,我认为无法通过 Axis 选项设置范围的最小值和最大值。

关于我可以在哪里指定范围的任何想法?

4

6 回答 6

80

找到了解决方案。

附加.forceY([0,100])到图表的实例化会强制轴采用数组中指定的范围。

从这里的例子http://nvd3.org/livecode/#codemirrorNav

附加.forceY([0,100])到图表变量有效。

于 2012-08-01T22:42:20.740 回答
33

顾名思义,这会将数组中的值添加到您的y域中,它不会将 y 域设置为[0,100]. 因此,如果您将其设置为[0,100]并且您的数据域为-10110则域将为[-10,110].

现在,如果您希望域[0,100]即使您的数据更大,您也可以使用chart.yDomain([0,100])......但通常您希望您的域包含您的数据,所以我强烈建议使用 chart.forceY 而不是chart.yDomain. 如您所见,forceY 最常见的用途之一是forceY([0])在域中始终设为 0。

希望可以帮助您了解该函数实际在做什么,而arboc7,这应该可以解释为什么它不能使范围小于数据集的范围。

于 2012-09-06T05:17:15.503 回答
11

对于堆积面积图,.forceY([0,100])不起作用。改为使用.yDomain([0,100])

于 2013-09-11T11:30:28.183 回答
8

如果您的意思是y-domain为堆积面积图设置(应显示的数字范围),这对我有用:

nv.models.stackedAreaChart()
  .x(function(d) {...})
  .y(function(d) {...})
  .yDomain([0, maxY])
...
于 2013-12-12T19:41:25.027 回答
1

我有一个类似的问题并通过在yAxis的yScale中明确定义域来解决它,即

var yscale = d3.scale.linear()
                     .domain([0,100])
                     .range([250, 0]);
var yAxis = d3.svg.axis()
                  .scale(yscale);
于 2016-02-22T21:32:47.173 回答
0

我试过像:

chart.forceY([DataMin, DataMax]);

Datamin 和 Datamax 需要从数组中计算。此外,为了在应用过滤器时动态调整轴点,需要自定义处理过滤器的点击事件,例如:

$('g.nv-series').click(function() {
   //Calculate DataMin, DataMax from the data array                    
   chart.forceY([DataMin, DataMax]);                        
});

因此,每次应用过滤器时,图表都会进行调整。

于 2016-01-17T20:18:40.633 回答