我试图绘制简单的d3js图。我通过绘制轴,甚至绘制了数据,但数据没有出现在预期的位置。
根据我下面的json数据
var d1 = [{
value1: "30",
value2: "10"
}];
我正试图在coordinates x axis 30 and y axis 10
处绘制一个圆圈,但图表上的圆圈会出现在其他地方。
这是jsfiddle demo
这是我的代码
var d1 = [{
value1: "30",
value2: "10"
}];
function Update(){
var circles = vis.selectAll("circle").data(d1)
circles
.enter()
.insert("svg:circle")
.attr("cx", function (d) { return d.value1; })
.attr("cy", function (d) { return d.value2; })
.style("fill", "red")
circles
.transition().duration(1000)
.attr("cx", function (d) { return d.value1; })
.attr("cy", function (d) { return d.value2; })
.attr("r", function (d) { return 5; })
circles.exit ()
.transition().duration(1000)
.attr("r", 0)
.remove ();
}
/*************************************************/
/*******************Real Stuff starts here*******************/
var vis = d3.select("#visualisation"),
WIDTH = 600,
HEIGHT = 400,
MARGINS = {
top: 20,
right: 20,
bottom: 20,
left: 50
},
xRange = d3.scale.linear().range([MARGINS.left, WIDTH - MARGINS.right]).domain([0,100]),
yRange = d3.scale.linear().range([HEIGHT - MARGINS.top, MARGINS.bottom]).domain([0,300]),
xAxis = d3.svg.axis() // generate an axis
.scale(xRange) // set the range of the axis
.tickSize(5) // height of the ticks
.tickSubdivide(true), // display ticks between text labels
yAxis = d3.svg.axis() // generate an axis
.scale(yRange) // set the range of the axis
.tickSize(5) // width of the ticks
.orient("left") // have the text labels on the left hand side
.tickSubdivide(true); // display ticks between text labels
function init() {
vis.append("svg:g") // add a container for the axis
.attr("class", "x axis") // add some classes so we can style it
.attr("transform", "translate(0," + (HEIGHT - MARGINS.bottom) + ")") // move it into position
.call(xAxis); // finally, add the axis to the visualisation
vis.append("svg:g")
.attr("class", "y axis")
.attr("transform", "translate(" + (MARGINS.left) + ",0)")
.call(yAxis);
}
init();
$('#btn').click(function(){
Update();
});
答案 0 :(得分:1)
您的圆圈出现在像素(30,10)处,但这与您的轴标记的地点30,10不对应。使用刻度来设置点的位置。
.attr("cx", function (d) { return xRange(d.value1); })
.attr("cy", function (d) { return yRange(d.value2); })
答案 1 :(得分:1)
如果你
,它会起作用value1: 30
而不是value1: "30"
)和return xRange(d.value1)
代替return d.value1
)。工作jsfiddle here。
答案 2 :(得分:0)
您需要将xScale
和yScale
应用于坐标,以将其转换为绘图空间。
.attr("cx", function (d) { return xRange(d.value1); })
.attr("cy", function (d) { return yRange(d.value2); })
答案 3 :(得分:0)
实际上它工作正常。只是左上角是(0,0)而不是左下角(我怀疑你必须假设)。
将x,y设置为0.圆圈将出现在左上角。