D3.js d3js的负值和正值

D3.js d3js的负值和正值,d3.js,negative-number,D3.js,Negative Number,我想用d3js显示负值和正值。。。使用dis代码,它只生成正值 我曾经做过这样的工作: 有人能帮我吗 她的密码是: var margin = {top: 20, right: 20, bottom: 30, left: 40}, width = 1200 - margin.left - margin.right, height = 390 - margin.top - margin.bottom; var y0 = Math.max(Math.abs(d3.min(d3.csv)), Mat

我想用d3js显示负值和正值。。。使用dis代码,它只生成正值

我曾经做过这样的工作:

有人能帮我吗

她的密码是:

var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 1200 - margin.left - margin.right,
height = 390 - margin.top - margin.bottom;


var y0 = Math.max(Math.abs(d3.min(d3.csv)), Math.abs(d3.max(d3.csv)));

var y = d3.scale.linear()
.domain([-y0, y0])
.range([height,0])
.nice();

var x = d3.scale.ordinal()
.domain(d3.range(d3.csv.length))
.rangeRoundBands([0, width], .1);


 var color = d3.scale.ordinal()
.range(["#FFFFFF",  "#FF0000", "#FE642E", "#00FF00", "#04B404", "#a05d56", "#d0743c", "#ff8c00"]);

 var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");

var yAxis = d3.svg.axis()
.scale(y)
.orient("left")


var chart2 = d3.select("#graph2")
.append ("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");


var div = d3.select("body").append("div")   
.attr("class", "tooltip")               
.style("opacity", 0);

d3.csv("dataanzeigeauto3.asp", function(error, data) {
color.domain(d3.keys(data[0]).filter(function(key) { return key !== "State"; }));

data.forEach(function(d) {
var y0 = 0
d.ages = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });
d.total = d.ages[d.ages.length - 1].y1;
});


x.domain(data.map(function(d) { return d.State; }));
y.domain([0, d3.max(data, function(d) { return d.total; })]);


chart2.append("g")
  .attr("class", "x axis")
  .attr("transform", "translate(0," + height + ")")
  .call(xAxis);

chart2.append("g")
  .attr("class", "y axis")
  .call(yAxis)
.append("text")
  .attr("transform", "rotate(-90)")
  .attr("dy", ".71em")
  .attr("y", 6)
  .style("text-anchor", "end")
  .text("Anzahl");


var state2 = chart2.selectAll(".state")
  .data(data)
.enter().append("g")
  .attr("class", "g")
  .attr("transform", function(d) { return "translate(" + x(d.State) + ",0)"; });


state2.selectAll("rect")
.data(function(d) { return d.ages; })  .enter().append("rect")
.attr("class", function(d) { return d < 0 ? "bar negative" : "bar positive"; })
.attr("y", function(d) { return y(Math.max(0, (d.y1))); })
.attr("height", function(d) { return Math.abs(y(d.y0) - y(d.y1)); })
.attr("width", x.rangeBand())
.style("fill", function(d) { return color(d.name); })
  .call(d3.helper.tooltip()
            .attr({class: 'tooltip2'})
            .text(function(d, i){ return d.name + ': '+ (-((d.y0) - (d.y1))) ; })
        );



var legend2 = chart2.selectAll(".legend")
  .data(color.domain().slice().reverse())
.enter().append("g")
  .attr("class", "legend")
  .attr("transform", function(d, i) { return "translate(0," + i * 100 + ")"; });

legend2.append("rect")
  .attr("x", width - 30)
  .attr("width", 18)
  .attr("height", 18)
  .style("fill", color);

 legend2.append("text")
  .attr("x", width - 35)
  .attr("y", 14)
  .attr("dy", ".35em")
  .style("text-anchor", "end")
  .text(function(d) { return d; });

});
var margin={top:20,right:20,bottom:30,left:40},
宽度=1200-margin.left-margin.right,
高度=390-margin.top-margin.bottom;
var y0=Math.max(Math.abs(d3.min(d3.csv)),Math.abs(d3.max(d3.csv));
变量y=d3.scale.linear()
.domain([-y0,y0])
.范围([高度,0])
.nice();
var x=d3.scale.ordinal()
.domain(d3.range(d3.csv.length))
.rangeRoundBands([0,宽度],.1);
var color=d3.scale.ordinal()
.范围([“FFFFFF”、“FF0000”、“FE642E”、“00FF00”、“04B404”、“a05d56”、“d0743c”、“ff8c00”);
var xAxis=d3.svg.axis()
.比例(x)
.东方(“底部”);
var yAxis=d3.svg.axis()
.比例(y)
.东方(“左”)
var chart2=d3。选择(“图2”)
.append(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
var div=d3.选择(“主体”).追加(“div”)
.attr(“类”、“工具提示”)
.样式(“不透明度”,0);
d3.csv(“dataanzeigaeuto3.asp”),函数(错误,数据){
域(d3.keys(数据[0]).filter(函数(键){returnkey!==“State”});
data.forEach(函数(d){
变量y0=0
d、 ages=color.domain().map(函数(名称){return{name:name,y0:y0,y1:y0+=+d[name]};});
d、 总计=d.ages[d.ages.length-1].y1;
});
x、 域(data.map(函数(d){返回d.State;}));
y、 域([0,d3.max(数据,函数(d){返回d.total;})];
图2.附加(“g”)
.attr(“类”、“x轴”)
.attr(“变换”、“平移(0)”、“高度+”)
.呼叫(xAxis);
图2.附加(“g”)
.attr(“类”、“y轴”)
.呼叫(yAxis)
.append(“文本”)
.attr(“变换”、“旋转(-90)”)
.attr(“dy”,“.71em”)
.attr(“y”,6)
.style(“文本锚定”、“结束”)
.文本(“Anzahl”);
var state2=chart2.选择全部(“.state”)
.数据(数据)
.enter().append(“g”)
.attr(“类别”、“g”)
.attr(“transform”,函数(d){return”translate(“+x(d.State)+”,0)”;});
状态2.选择全部(“rect”)
.data(函数(d){return d.ages;}).enter().append(“rect”)
.attr(“类”,函数(d){返回d<0?“条负”:“条正”;})
.attr(“y”,函数(d){返回y(Math.max(0,(d.y1));})
.attr(“height”,函数(d){return Math.abs(y(d.y0)-y(d.y1));}
.attr(“宽度”,x.rangeBand())
.style(“fill”,函数(d){返回颜色(d.name);})
.call(d3.helper.tooltip()
.attr({class:'tooltip2'})
.text(函数(d,i){返回d.name+':'+((d.y0)-(d.y1));})
);
var legend2=chart2.选择全部(“.legend”)
.data(color.domain().slice().reverse())
.enter().append(“g”)
.attr(“类”、“图例”)
.attr(“transform”,函数(d,i){return“translate(0,+i*100+”);});
legend2.附加(“rect”)
.attr(“x”,宽度-30)
.attr(“宽度”,18)
.attr(“高度”,18)
.样式(“填充”,颜色);
legend2.附加(“文本”)
.attr(“x”,宽度-35)
.attr(“y”,14)
.attr(“dy”,“.35em”)
.style(“文本锚定”、“结束”)
.text(函数(d){return d;});
});

在决定
y0
的代码中什么是
d3.csv
?在
Math.max(Math.abs(d3.min(d3.csv)),Math.abs(d3.max(d3.csv)))中什么是
d3.csv
是一个可以用来检索数据的函数。定义
y0
时使用它的方式毫无意义。我建议您看一看(很多)使用CSV文件绘制图形的示例之一。您的数据。你想计算的最小值和最大值。