【问题标题】:c3js › value 0 aligned between Y and Y2c3js › 值 0 在 Y 和 Y2 之间对齐
【发布时间】:2016-08-09 13:02:52
【问题描述】:

Y 0 轴值如何与 Y2 0 轴值对齐?

jsFiddle了解。

我在斧头上尝试了center:0 选项,但我不想在图形中心设置 0..

var chart = c3.generate({
    data: {
        columns: [
            ['data1', 2000, 350, 300, -200, -50, 0],
            ['data2', 130, 100, 140, 200, 150, 50]
        ],
        types: {
            data1: 'line',
            data2: 'bar'
        },
        axes:{
            data1:'y',
          data2:'y2'
        }
    },
    axis: {
        y: {
            padding: {bottom: 0}

        },
         y2: {
                show:true,
            padding: {bottom: 0}

        },
        x: {

            min: 0,
            show: true
        }
    },
    grid: {
        x: {
            show: false
        },
        y: {
            show: false,
            lines: [
                {value: 0.0, text: 'i want 0 here ->', class:'red'}
            ]
        }
    }
});

Official documentation.

谢谢。

【问题讨论】:

  • 不是像jsfiddle.net/ynz6quum/2那样在axis.y2中添加min: -20那么简单吗?还是不会产生您想要的结果?
  • 更新时错误仍然存​​在,有什么方法可以动态计算这个“min”吗?

标签: javascript d3.js c3.js


【解决方案1】:

一般来说,您希望轴范围在零以上和零以下的比例相同,这就是为什么 min: -20 适用于这个特定示例的原因

这通常会在您生成图表后起作用:

var d1 = d3.extent(chart.data.values("data1"));
var d2 = d3.extent(chart.data.values("data2"));
if (d2[0] < 0 || d1[0] < 0) {
        var prop1 = d1[0] < 0 ? -(d1[1] / d1[0]) : Math.Infinity; 
    var prop2 = d2[0] < 0 ? -(d2[1] / d2[0]) : Math.Infinity;
    if (prop1 > prop2) {
        d1[0] = -(d1[1] / prop2);
    } else {
          d2[0] = -(d2[1] / prop1);
    }
    chart.axis.range({
            min: {y: d1[0], y2: d2[0]},
          max: {y: d1[1], y2: d2[1]}
    });
}

基本上,如果其中一个(或两个)系列具有负值,那么它会使用最小/最大轴设置缩放两个系列以具有相同比例的正负范围。这意味着零位于两者的相同垂直点

https://jsfiddle.net/ynz6quum/4/

【讨论】:

  • 完美运行,非常感谢!谢谢你,格雷厄姆 ;)
  • 任何访问 jsfiddle 的人 - 请注意您需要添加资源 URL cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js 或类似的。 JSFiddle 似乎在太多 c3 示例中丢失了 d3 引用。
  • 是的,我注意到了。 jsfiddles 的问题在于 c3 master 已经转移到仅适用于 d3 v4 及更高版本的版本。您可以在代码段上方的下拉列表中(应该说 javascript 和 d3 3.x)在“框架和扩展”下将 d3 版本更改为 4.13.0,它可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2020-11-28
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多