Javascript 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 但当我试图把标签,我需要他们在酒吧的顶部中间。但要知道把它们

我试图用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

但当我试图把标签,我需要他们在酒吧的顶部中间。但要知道把它们放在哪里,我需要以某种方式引用那些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上