d3.js& nvd3.js - 如何设置y轴范围

时间:2012-08-01 20:13:43

标签: javascript d3.js nvd3.js

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

查阅了API文档,并找到了一个可能的解决方案,其中包含axis.tickValues https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

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

  

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

所以我认为设置范围的最小值和最大值不能通过Axis选项完成。

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

6 个答案:

答案 0 :(得分:79)

找到解决方案。

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

来自此处的示例http://nvd3.org/livecode/#codemirrorNav

.forceY([0,100])附加到图表变量可以正常工作。

答案 1 :(得分:32)

如名称所示,这会将数组中的值添加到您的y域,而不会将y域设置为[0,100]。因此,如果您将其设置为[0,100]且数据的域名为-10110,则域名将为[-10,110]

现在,如果您希望域名为[0,100],即使您的数据较大,也可以使用chart.yDomain([0,100]) ...但通常您希望自己的域名包含您的数据,因此我强烈建议您使用chart.forceY而不是chart.yDomain。正如您所看到的,forceY最常见的用途之一是forceY([0]),使0永远在域中。

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

答案 2 :(得分:10)

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

答案 3 :(得分:7)

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

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

答案 4 :(得分:0)

我试过了:

chart.forceY([DataMin, DataMax]);

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

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

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

答案 5 :(得分:0)

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

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