Javascript tr(“字体大小”、“粗体”) .attr(“文本锚定”、“开始”) .文本(“人口”)

Javascript tr(“字体大小”、“粗体”) .attr(“文本锚定”、“开始”) .文本(“人口”),javascript,d3.js,svg,charts,data-visualization,Javascript,D3.js,Svg,Charts,Data Visualization,首先,更改您的y缩放域以获得负值: y.domain([d3.min(data, function(d) { return d3.min(keys, function(key) { return d[key]; }); }), d3.max(data, function(d) { return d3.max(keys, function(key) { return d[key]; }); })]).nice(); 如果您想要一个较

首先,更改您的
y
缩放域以获得负值:

y.domain([d3.min(data, function(d) {
    return d3.min(keys, function(key) {
        return d[key];
    });
}), d3.max(data, function(d) {
    return d3.max(keys, function(key) {
        return d[key];
    });
})]).nice();

如果您想要一个较短的代码,请考虑使用<代码> d3。 然后,改变你的数学:这是没有意义的酒吧从底部的轴和上升。与此相反,所有条应来自

y
轴中的
0
值,如果它们为正,则上升,否则如果它们为负,则下降:

.attr("y", function(d) {
    return d.value > 0 ? y(d.value) : y(0);
})
.attr("height", function(d) {
    return d.value > 0 ? y(0) - y(d.value) : y(d.value) - y(0);
})
以下是您的代码和这些更改:

var csv=`name,value,koken,kcal
Ab,-15,0,-7
C、 22,1,2
公元前-20,0,-10
E、 2,1,20`;
var保证金={
前20名,
右:30,,
底数:40,
左:30
},
宽度=600-边距。左侧-边距。右侧,
高度=400-margin.top-margin.bottom;
var svg=d3。选择(“svg”),
g=svg.append(“g”).attr(“transform”、“translate”(+margin.left+)、“+margin.top+”);
var x0=d3.scaleBand()
.rangeRound([0,宽度]);
var x1=d3.scaleBand()
.填充(0.05);
变量y=d3.scaleLinear()
.rangeRound([高度,0]);
var z=d3.scaleOrdinal()
.范围([“#98abc5”、“#8a89a6”、“#7b6888”]);
var data=d3.csvParse(csv,函数(d,i,列){
对于(var i=1,n=columns.length;i0?y(d.value):y(0);
})
.attr(“宽度”,x1.bandwidth())
.attr(“高度”,功能(d){
返回d.value>0?y(0)-y(d.value):y(d.value)-y(0);
})
.attr(“填充”,功能(d){
返回z(d键);
});
g、 附加(“g”)
.attr(“类”、“轴”)
.attr(“变换”、“平移(0)”、“高度+”)
.call(d3.axisBottom(x0));
g、 附加(“g”)
.attr(“类”、“轴”)
.call(d3.axisLeft(y).ticks(null,“0”))
.append(“文本”)
.attr(“x”,20)
.attr(“y”,y(y.ticks().pop())+0.5)
.attr(“dy”,“0.32em”)
.attr(“填充”、“千”)
.attr(“字体大小”、“粗体”)
.attr(“文本锚定”、“开始”)
.文本(“人口”)

 y.domain([
    d3.min(data, function(d) { return d3.min(keys, function(key) { return d[key]; }); }),
    d3.max(data, function(d) { return d3.max(keys, function(key) { return d[key]; }); })]).nice();
y.domain([d3.min(data, function(d) {
    return d3.min(keys, function(key) {
        return d[key];
    });
}), d3.max(data, function(d) {
    return d3.max(keys, function(key) {
        return d[key];
    });
})]).nice();
.attr("y", function(d) {
    return d.value > 0 ? y(d.value) : y(0);
})
.attr("height", function(d) {
    return d.value > 0 ? y(0) - y(d.value) : y(d.value) - y(0);
})