Javascript D3 JS绘图条形图
我试图用D3在JS中绘制一些条形图。因此,到目前为止,我所做的是:Javascript D3 JS绘图条形图,javascript,d3.js,charts,Javascript,D3.js,Charts,我试图用D3在JS中绘制一些条形图。因此,到目前为止,我所做的是: var svg = d3.select("body").append("svg").attr("width", 500).attr("height", 200); svg.selectAll("rect").... //drawing the bars svg.selectAll("text").... //putting labels on top of bars 但当我试图把标签,我需要他们在酒吧的顶部中间。但要知道把它们
var svg = d3.select("body").append("svg").attr("width", 500).attr("height", 200);
svg.selectAll("rect").... //drawing the bars
svg.selectAll("text").... //putting labels on top of bars
但当我试图把标签,我需要他们在酒吧的顶部中间。但要知道把它们放在哪里,我需要以某种方式引用那些d3对象的条。。。如何操作?如果您正在为svg使用
xScale
,则可以使用此属性放置文本:
.attr("x", function(d, i) { return xScale(i) + xScale.rangeBand() / 2; })
如果xScale设置为:
var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([0, w], 0.05);
其中,比例中的
w
是svg文档的宽度如果您对svg使用xScale
,则可以使用此属性放置文本:
.attr("x", function(d, i) { return xScale(i) + xScale.rangeBand() / 2; })
如果xScale设置为:
var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([0, w], 0.05);
其中,比例中的
w
是svg文档的宽度如果您对svg使用xScale
,则可以使用此属性放置文本:
.attr("x", function(d, i) { return xScale(i) + xScale.rangeBand() / 2; })
如果xScale设置为:
var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([0, w], 0.05);
其中,比例中的
w
是svg文档的宽度如果您对svg使用xScale
,则可以使用此属性放置文本:
.attr("x", function(d, i) { return xScale(i) + xScale.rangeBand() / 2; })
如果xScale设置为:
var xScale = d3.scale.ordinal()
.domain(d3.range(dataset.length))
.rangeRoundBands([0, w], 0.05);
其中,比例中的w
是svg文档的宽度请查看:
- 范例
- 范例
// Create text values that go at end of each bar...
canvas.selectAll("text")
.data(dataSet) // Bind dataSet to text elements
.enter().append("svg:text") // Append text elements
.attr("x", x)
.attr("y", function(d, i) { return y(i); })
//.attr("y", function(d) { return y(d) + y.rangeBand() / 2; })
.attr("dx", function(d) { return x(d.magnitude) - 5; })
.attr("dy", barHeight-5) // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(function(d) { return d.magnitude;})
.attr("fill", "White");
或每个垂直条顶部的文本
// Create text values that go at top of each bar...
canvas.selectAll("text")
.data(dataSet) // Instruct to bind dataSet to text elements
.enter().append("svg:text") // Append text elements
// Identify root coordinate (x,y)
//.attr("x", function(d, i) { return x(i) + barWidth; }) // <-- Can't use because of bug in FireFox
.attr("x", function(d, i) { return x(i) + barWidth / 2; }) // <-- Using because of bug in Firefox
// Note: the following "+1" offset places value above bar in
// Space between the top of the bar and the top of the canvas.
.attr("y", function(d) {
return canvasHeight - y(d.magnitude ); })
//.attr("dx", -barWidth/2) // <-------------- Can't use because of bug in FireFox
.attr("dy", "1em") // Controls padding to place text above bars
.attr("text-anchor", "middle")
.text(function(d) { return d.magnitude;})
.attr("fill", "Black");
//创建位于每个栏顶部的文本值。。。
canvas.selectAll(“文本”)
.data(dataSet)//指示将dataSet绑定到文本元素
.enter().append(“svg:text”)//追加文本元素
//确定根坐标(x,y)
//.attr(“x”,函数(d,i){return x(i)+barWidth;})/看看:
- 范例
- 范例
每个显示如何定位标签
例如,在每个水平条的末端
// Create text values that go at end of each bar...
canvas.selectAll("text")
.data(dataSet) // Bind dataSet to text elements
.enter().append("svg:text") // Append text elements
.attr("x", x)
.attr("y", function(d, i) { return y(i); })
//.attr("y", function(d) { return y(d) + y.rangeBand() / 2; })
.attr("dx", function(d) { return x(d.magnitude) - 5; })
.attr("dy", barHeight-5) // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(function(d) { return d.magnitude;})
.attr("fill", "White");
或每个垂直条顶部的文本
// Create text values that go at top of each bar...
canvas.selectAll("text")
.data(dataSet) // Instruct to bind dataSet to text elements
.enter().append("svg:text") // Append text elements
// Identify root coordinate (x,y)
//.attr("x", function(d, i) { return x(i) + barWidth; }) // <-- Can't use because of bug in FireFox
.attr("x", function(d, i) { return x(i) + barWidth / 2; }) // <-- Using because of bug in Firefox
// Note: the following "+1" offset places value above bar in
// Space between the top of the bar and the top of the canvas.
.attr("y", function(d) {
return canvasHeight - y(d.magnitude ); })
//.attr("dx", -barWidth/2) // <-------------- Can't use because of bug in FireFox
.attr("dy", "1em") // Controls padding to place text above bars
.attr("text-anchor", "middle")
.text(function(d) { return d.magnitude;})
.attr("fill", "Black");
//创建位于每个栏顶部的文本值。。。
canvas.selectAll(“文本”)
.data(dataSet)//指示将dataSet绑定到文本元素
.enter().append(“svg:text”)//追加文本元素
//确定根坐标(x,y)
//.attr(“x”,函数(d,i){return x(i)+barWidth;})/看看:
- 范例
- 范例
每个显示如何定位标签
例如,在每个水平条的末端
// Create text values that go at end of each bar...
canvas.selectAll("text")
.data(dataSet) // Bind dataSet to text elements
.enter().append("svg:text") // Append text elements
.attr("x", x)
.attr("y", function(d, i) { return y(i); })
//.attr("y", function(d) { return y(d) + y.rangeBand() / 2; })
.attr("dx", function(d) { return x(d.magnitude) - 5; })
.attr("dy", barHeight-5) // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(function(d) { return d.magnitude;})
.attr("fill", "White");
或每个垂直条顶部的文本
// Create text values that go at top of each bar...
canvas.selectAll("text")
.data(dataSet) // Instruct to bind dataSet to text elements
.enter().append("svg:text") // Append text elements
// Identify root coordinate (x,y)
//.attr("x", function(d, i) { return x(i) + barWidth; }) // <-- Can't use because of bug in FireFox
.attr("x", function(d, i) { return x(i) + barWidth / 2; }) // <-- Using because of bug in Firefox
// Note: the following "+1" offset places value above bar in
// Space between the top of the bar and the top of the canvas.
.attr("y", function(d) {
return canvasHeight - y(d.magnitude ); })
//.attr("dx", -barWidth/2) // <-------------- Can't use because of bug in FireFox
.attr("dy", "1em") // Controls padding to place text above bars
.attr("text-anchor", "middle")
.text(function(d) { return d.magnitude;})
.attr("fill", "Black");
//创建位于每个栏顶部的文本值。。。
canvas.selectAll(“文本”)
.data(dataSet)//指示将dataSet绑定到文本元素
.enter().append(“svg:text”)//追加文本元素
//确定根坐标(x,y)
//.attr(“x”,函数(d,i){return x(i)+barWidth;})/看看:
- 范例
- 范例
每个显示如何定位标签
例如,在每个水平条的末端
// Create text values that go at end of each bar...
canvas.selectAll("text")
.data(dataSet) // Bind dataSet to text elements
.enter().append("svg:text") // Append text elements
.attr("x", x)
.attr("y", function(d, i) { return y(i); })
//.attr("y", function(d) { return y(d) + y.rangeBand() / 2; })
.attr("dx", function(d) { return x(d.magnitude) - 5; })
.attr("dy", barHeight-5) // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(function(d) { return d.magnitude;})
.attr("fill", "White");
或每个垂直条顶部的文本
// Create text values that go at top of each bar...
canvas.selectAll("text")
.data(dataSet) // Instruct to bind dataSet to text elements
.enter().append("svg:text") // Append text elements
// Identify root coordinate (x,y)
//.attr("x", function(d, i) { return x(i) + barWidth; }) // <-- Can't use because of bug in FireFox
.attr("x", function(d, i) { return x(i) + barWidth / 2; }) // <-- Using because of bug in Firefox
// Note: the following "+1" offset places value above bar in
// Space between the top of the bar and the top of the canvas.
.attr("y", function(d) {
return canvasHeight - y(d.magnitude ); })
//.attr("dx", -barWidth/2) // <-------------- Can't use because of bug in FireFox
.attr("dy", "1em") // Controls padding to place text above bars
.attr("text-anchor", "middle")
.text(function(d) { return d.magnitude;})
.attr("fill", "Black");
//创建位于每个栏顶部的文本值。。。
canvas.selectAll(“文本”)
.data(dataSet)//指示将dataSet绑定到文本元素
.enter().append(“svg:text”)//追加文本元素
//确定根坐标(x,y)
//.attr(“x”,函数(d,i){return x(i)+barWidth;})//您是否使用刻度进行可视化?@tomtomtom是的,我是。您是否使用刻度进行可视化?@tomtomtomtom是的,我是。您是否使用刻度进行可视化?@tomtomtom是的,我是。我仅使用y刻度,恐怕。难道不可能以某种方式引用绘制的矩形吗?顺便说一句,我尝试过这样提取它:var xPos=parseFloat(d3.selectAll(“rect”).attr(“x”);但这只会覆盖它。要引用每个条的中间,您必须执行如下操作:.attr(“x”,函数(d,i){((width/dataset.length)/2)*i;}),其中(width/dataset.length)/2应该为每个条的一半,而*i应该将文本放在x轴的正确位置,但是我要播放什么呢?我设法在粘贴箱被删除之前看到了它,文本现在显示为以下代码:svg.selectAll(“text”).data(whoIs.enter().append(“text”).text(函数(d){return d;}).attr(“文本锚定”,“中间”).attr(“x”,函数(d,I){return leftMargin+(I*((svgW/whoIs.length)+leftMargin))/2;}).attr(“y”,20);仍然需要对定位进行一些调整。还要注意的是,最后一个条不完全在框架中。恐怕我只使用y刻度。难道不可能以某种方式引用绘制的矩形吗?顺便说一句,我尝试过这样提取它:var xPos=parseFloat(d3.selectAll(“rect”).attr(“x”);但这只会覆盖它。要引用每个条的中间,您必须执行如下操作:.attr(“x”,函数(d,i){((width/dataset.length)/2)*i;}),其中(width/dataset.length)/2应该为每个条的一半,而*i应该将文本放在x轴的正确位置,但是我要播放什么呢?我设法在粘贴箱被删除之前看到了它,文本现在显示为以下代码:svg.selectAll(“text”).data(whoIs.enter().append(“text”).text(函数(d){return d;}).attr(“文本锚定”,“中间”).attr(“x”,函数(d,I){return leftMargin+(I*((svgW/whoIs.length)+leftMargin))/2;}).attr(“y”,20);仍然需要对定位进行一些调整。还要注意的是,最后一个条不完全在框架中。恐怕我只使用y刻度。难道不可能以某种方式引用绘制的矩形吗?顺便说一句,我尝试过这样提取它:var xPos=parseFloat(d3.selectAll(“rect”).attr(“x”);要引用每个条的中间部分,您必须执行如下操作:.attr(“x”,函数(d,i){((width/dataset.length)/2)*i;}),其中(width/dataset.length)/2应给出每个条的一半,而*i应将文本放在c上