Javascript c3js›;值0在Y和Y2之间对齐

Javascript c3js›;值0在Y和Y2之间对齐,javascript,d3.js,c3.js,Javascript,D3.js,C3.js,如何将Y 0轴值与Y2 0轴值对齐 看明白了 我在斧头上尝试了选项center:0,但我不想让0位于图形的中心 var chart = c3.generate({ data: { columns: [ ['data1', 2000, 350, 300, -200, -50, 0], ['data2', 130, 100, 140, 200, 150, 50] ], types: {

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

看明白了

我在斧头上尝试了选项
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'}
            ]
        }
    }
});


谢谢。

通常,您希望轴范围在零上下的比例相同,这就是为什么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]}
    });
}
vard1=d3.extent(chart.data.values(“data1”);
VarD2=d3.范围(图表.数据.值(“数据2”));
if(d2[0]<0 | | d1[0]<0){
var prop1=d1[0]<0?-(d1[1]/d1[0]):数学无穷大;
var prop2=d2[0]<0?-(d2[1]/d2[0]):数学无穷大;
如果(prop1>prop2){
d1[0]=-(d1[1]/prop2);
}否则{
d2[0]=-(d2[1]/prop1);
}
图表轴范围({
min:{y:d1[0],y2:d2[0]},
max:{y:d1[1],y2:d2[1]}
});
}
基本上,如果其中一个(或两个)系列具有负值,则它会使用最小/最大轴设置缩放两个系列,使其具有相同比例的正负范围。这意味着零位于两个位置的同一垂直点


这难道不像在axis.y2中添加
min:-20
那样简单吗?或者这不会产生你想要的结果吗?当我更新时,错误仍然存在,某种动态计算“min”的方法?它工作得非常完美,我非常感谢!谢谢你,先生;)任何访问JSFIDLE的人都需要添加资源URL或类似内容。JSFIDLE似乎在太多c3示例中丢失了d3引用。是的,我注意到了。jsfiddles的问题在于c3主机已经转移到只适用于d3v4及以上版本的版本上。您可以在代码段(应该是javascript和D33.x)上方的下拉列表中,在“框架和扩展”下将d3版本更改为4.13.0,并且可以正常工作。