如何在discreteBarChart nvd3.js上设置y轴上的域和比例

时间:2013-02-12 20:01:43

标签: d3.js nvd3.js

我在我的一个应用程序中使用d3.js图表​​。 他们在这张图片中 见Charts

对于Money图表上的Y轴(参见图片),我希望最大值四舍五入为400,无论这里的最大条形尺寸是358.72美元,但我想保持在358.72,但在Y轴上它会是400限制。

代码就在这里

tradesChart = [ 
      {
        key: "Cumulative Return",
        values: [
                        {
            "label" : "6E",
            "value" : 100       },
                    {
            "label" : "NG",
            "value" : 100       },
                    {
            "label" : "TF",
            "value" : 67        }        ]
      }
    ];
        nv.addGraph(function() {

      var chart = nv.models.discreteBarChart()
          .x(function(d) { return d.label })
          .y(function(d) { return d.value/100 })
          .staggerLabels(true)
          .showValues(true)
          .valueFormat(d3.format('.0%'))

      chart.yAxis.tickFormat(function(d) { return d3.format('d')(d*100) + '%'; });

      d3.select('#chart-trades svg')
        .datum(tradesChart)
        .transition().duration(500)
        .call(chart);

      nv.utils.windowResize(chart.update);

      return chart;
    });

请帮我解决这个问题

3 个答案:

答案 0 :(得分:15)

您需要修改Y轴刻度的域。通常它是使用如下语句从数据的最大值派生的:

yScale.domain([0, d3.max(data, function (d) { return d.v; }) ]);

在您的情况下,您应该将其修改为更像这样:

yScale.domain([0, 400]);

或者,如果要从数据设置最小静态值,可以执行以下操作:

yScale.domain([0, d3.max(data, function (d) { return d.v > 400 ? d.v : 400; }) ]);

完整示例jsfiddle是here

这是如何用D3.js做的,我不熟悉古老的nvd3.js lib,所以我不知道如何访问规模,但我会看一看,看看能不能找到它。

答案 1 :(得分:0)

强迫Y

强制进入Y标度的数字列表(即0,或最大/最小等)。数字告诉d3.js在比例中使用的值,而不是d3.js确定值。

数据类型:数字数组(即[0,50]

http://cmaurer.github.io/angularjs-nvd3-directives/line.chart.html

答案 2 :(得分:0)

我使用nvd3,对我来说,它起作用了:

nv.models.discreteBarChart().yDomain([0,400])

我无法与yScale.domain一起使用