Javascript c3js›;值0在Y和Y2之间对齐
如何将Y 0轴值与Y2 0轴值对齐 看明白了 我在斧头上尝试了选项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: {
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,并且可以正常工作。