您可以在此页面上看到我想要实现的示例.
我用这段代码构造了负轴和正轴:
this.svg = d3.select(el).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 + ")"); this.xScale = d3.scale.linear() .range([0, width]); this.yScale = d3.scale.linear() .range([height, 0]); const xAxis = d3.svg.axis() .scale(this.xScale); const yAxis = d3.svg.axis() .orient('left') .scale(this.yScale); const data = this.getDataFromProps(this.props.expression); this.xScale.domain(d3.extent(data, function (d) {return d.x;})); this.yScale.domain(d3.extent(data, function (d) {return d.y;})); this.svg.append('g') .attr('class', 'axis') .attr('transform', 'translate(0,' + height + ')') .call(xAxis); this.svg.append('g') .attr('class', 'axis') .attr('transform', 'translate(' + width/2 + ',0)') .call(yAxis);
唯一的问题是x轴朝向底部.如何将轴定位在svg上的(0,0)?
只需改变这一行:
this.svg.append('g') .attr('class', 'axis') .attr('transform', 'translate(0,' + (height/2) + ')') .call(xAxis);
使转换为svg高度的一半.
要使x轴与y轴的0标记对齐,请使用: -
this.svg.append('g') .attr('class', 'axis') .attr('transform', 'translate(0,' + (this.yScale(0)) + ')') .call(xAxis);