我正在尝试将图表的y轴范围设置为1-100。
查阅了API文档,并找到了一个可能的解决方案,其中包含axis.tickValues https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues
但是,使用该选项不起作用。进一步阅读上面在axis.tickSize下面链接的文档页面,发现以下行
结束标记由相关标度的范围确定, 并且是生成的路径域的一部分而不是刻度线
所以我认为设置范围的最小值和最大值不能通过Axis选项完成。
关于我可以指定范围的任何想法?
答案 0 :(得分:79)
找到解决方案。
将.forceY([0,100])
附加到图表的实例化会强制轴采用数组中指定的范围。
来自此处的示例http://nvd3.org/livecode/#codemirrorNav
将.forceY([0,100])
附加到图表变量可以正常工作。
答案 1 :(得分:32)
如名称所示,这会将数组中的值添加到您的y
域,而不会将y域设置为[0,100]
。因此,如果您将其设置为[0,100]
且数据的域名为-10
至110
,则域名将为[-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);