Nvd3.js - 将多个y轴添加到累积图表

时间:2015-08-23 21:30:10

标签: javascript d3.js nvd3.js angularjs-nvd3-directives angular-nvd3

我需要在累积的Nvd3图表中添加多个y轴,是否有人知道我需要修改的图书馆代码的哪一部分?

如果你自己做了这件事并且可以提供一个Jsfiddle,那就更好了。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:7)

只有具有多Y轴功能的特定图表类型。

这不适用于累积折线图。

但它可用于多图表。 Angluar NVD3主页here上有一个示例,但它显示了带条和线的示例。

我从主页分叉了plunker示例,并将系列类型更改为all line,以向您展示如何使用multi来获得与累积折线图相同的结果。

(我也更改了数据集以简化示例)

Pluker Example

首先要为多轴添加选项:

 $scope.options = {
            chart: {
                type: 'multiChart',
                height: 450,
                margin : {
                    top: 30,
                    right: 60,
                    bottom: 50,
                    left: 70
                },
                color: d3.scale.category10().range(),
                //useInteractiveGuideline: true,
                transitionDuration: 500,
                xAxis: {
                    tickFormat: function(d){
                        return d3.format(',f')(d);
                    }
                },
                yAxis1: {
                    tickFormat: function(d){
                        return d3.format(',.1f')(d);
                    }
                },
                yAxis2: {
                    tickFormat: function(d){
                        return d3.format(',.1f')(d);
                    }
                }
            }
        };

定义您的数据:

 $scope.data = [{key: 'series1', type: "line", yAxis: 1, values:[{x: 10, y: 20}, {x: 20, y: 35}, {x: 30, y:18}]},
        {key: 'series2',  type: "line", yAxis: 1,values:[{x: 10, y: 12}, {x: 20, y: 26}, {x: 30, y: 15}]},
        {key: 'series3',  type: "line", yAxis: 2,values:[{x: 10, y: 0.75}, {x: 20, y: 0.9}, {x: 30, y: 0.8}]},
        {key: 'series4',  type: "line", yAxis: 2,values:[{x: 10, y: 0.2}, {x: 20, y: 0.3}, {x: 30, y: 0.4}]}]

请注意,typeyAxis键是针对每个系列设置的。

<div>设置为正常:

 <nvd3 options="options" data="data"></nvd3>

那就是它!

您将获得与累积折线图相同的图表,但能够设置多个轴。

答案 1 :(得分:2)

如果您指的是将多个y轴添加到NVD3 line and bar chart中已有的单个图表中。部分代码段如下所示。

      chart.y1Axis
          .tickFormat(d3.format(',f'));

      chart.y2Axis
          .tickFormat(function(d) { return '$' + d3.format(',f')(d) });