1
我正在通過一本關於使用D3進行數據可視化的書。我很喜歡這個,我正在嘗試添加座標軸到我的圖表。示例代碼可以工作,但由於某種原因,當我嘗試將軸類添加到我的SVG元素時,它將無法工作。將軸附加到D3圖表
我的代碼如下:
function draw(data) {
//code
"use strict";
var margin = 50,
width = 700,
height = 300;
var x_extent = d3.extent(data, function(d){return d.collision_with_injury});
var y_extent = d3.extent(data, function(d){return d.dist_between_fail});
var x_scale = d3.scale.linear()
.range([margin, width-margin])
.domain(x_extent);
var y_scale = d3.scale.linear()
.range([height-margin, margin])
.domain(y_extent);
var x_axis = d3.svg.axis().scale("x_scale");
var y_axis = d3.svg.axis().scale("y_scale").orient("left");
d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", function(d){return x_scale(d.collision_with_injury)})
.attr("cy", function(d){return y_scale(d.dist_between_fail)})
.attr("r", 5)
d3.select("svg")
.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + (height-margin) + ")")
.call(x_axis);
d3.select("svg")
.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + margin +", 0)")
.call(y_axis)
d3.select('.y axis')
.append('text')
.text('mean distance between failure (miles)')
.attr('transform', "rotate (-90, -43, 0) translate(-280)")
d3.select('.x axis')
.append('text')
.text('collisions with injury (per million miles)')
.attr('x', function(){return (width/2) - margin})
.attr('y', margin/1.5)
}
嗨拉爾斯 我改變了我的代碼,以符合你的建議,我仍然沒有看到軸。 .x.axis被附加到SVG中,但沒有任何值填充它,並且不會附加.y.axis。有任何想法嗎? – Siya
這聽起來像是一個尺度問題。您是否確認所有數據都被正確讀取,並且秤的範圍計算是否正確? –
我需要研究這一點,我懷疑這也與數據和可能不能很好地讀取數據的代碼有關。謝謝拉爾斯。 – Siya