2012-08-01 148 views
50

我试图从1-100设置图表的y轴范围。d3.js&nvd3.js - 如何设置y轴范围

咨询API文档,发现与axis.tickValues一个可能的解决方案是在这里看到 https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

但是,使用选项不起作用。读取进一步向下axis.tickSize下上面链接的文档页上,下面的行点样

端蜱由相关联的尺度的域范围, 确定,并将所生成的路径域的一部分,而不是一个刻度线

所以我把它设置范围的最小值和最大值不能通过轴选项来完成。

任何想法,我可以指定范围?

回答

76

找到了解决方案。

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

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

追加.forceY([0,100])到图表变量作品。

+4

这对我的作品以扩大超出了最大/最小范围内折线图,但不是为了使范围小于数据。 – arboc7 2012-08-06 18:04:30

+6

注意:forceY似乎不适用于堆积区域图表=/ – 2013-07-31 23:58:36

+5

注意:您可以使用'.forceY(val)'强制最小值,并且最大值将保持动态。 – 2014-02-21 18:47:32

31

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

,如果你想使用的域为[0,100],即使你的数据更大,你可以使用chart.yDomain([0,100]) ...但通常你想你的域包括或您的数据,所以我强烈建议使用,而不是chart.yDomain chart.forceY。正如你所看到的,forceY最常见的用途之一是forceY([0]),使0永远在域中。

希望能够帮助您理解该函数实际上在做什么,以及arboc7,这应该解释为什么它在使范围小于数据集时不起作用。

10

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

+1

有没有办法强制堆栈图的范围,但在检查单个数据集时仍然可以自动缩放?例如当您在示例http://nvd3.org/examples/stackedArea.html – francisbyrne 2016-03-03 02:32:34

+0

中单击“北美”时如果您有多个y轴(如多图示例),则必须执行'yDomain1'和'yDomain2 '等。请参阅此处列出的问题:https://github.com/krispo/angular-nvd3/issues/81 – bwest87 2017-06-07 22:32:43

6

如果你的意思是设置y-domain的堆积面积图(在应该显示的数字的范围),这对我的作品:

nv.models.stackedAreaChart() 
    .x(function(d) {...}) 
    .y(function(d) {...}) 
    .yDomain([0, maxY]) 
... 
0

我已经试过这样的:

chart.forceY([DataMin, DataMax]); 

Datamin和Datamax需要从数组中计算。此外序动态调整轴点,当过滤器适用于需要自定义处理单击形过滤器事件:

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

所以图将每一个过滤器适用时间调整。

+0

如果您只使用默认域和范围,则nvd3将根据您的数据集自动设置最小/最大值。并且将在添加新数据时重新计算。 – 2016-02-19 17:33:08

0

我也有类似的问题,并通过显式定义在y轴的yScale域名解析它,即

var yscale = d3.scale.linear() 
        .domain([0,100]) 
        .range([250, 0]); 
var yAxis = d3.svg.axis() 
        .scale(yscale);