首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >d3 +条形图+顶部、中部、底部、中心的定位数据标签

问d3 +条形图+顶部、中部、底部、中心的定位数据标签
EN

Stack Overflow用户
提问于 2016-05-18 22:51:46
回答 1查看 2K关注 0票数 2

这是我的小提琴,我是用这个示例构建的

这是我要添加文本标签的代码

代码语言:javascript
复制
svg.selectAll(".barText")
      .data(data)                                 
      .enter().append("text")
      .attr("class", "barText")
      .attr("x", function(d) { return x(d.letter); })
      .attr("y", function(d) { return y(d.frequency); })
      .text(function(d) { return Math.floor(d.frequency*100)+"%"; });

如何控制标签的位置,使其处于以下位置:

  1. 在酒吧里
  2. 在酒吧顶上
  3. 酒吧的底部
  4. 总是站在酒吧的中央

理想情况下,我不想硬编码,只想动态编码。

这是我的尝试,但还有更好的方法吗?

//显示中心(指条形轴),但仅在本例中不确定它的动态程度

代码语言:javascript
复制
.attr("x", function(d) { return x(d.letter) + x.rangeBand()/5; }) 

//label略高于栏

代码语言:javascript
复制
.attr("y", function(d) { return y(d.frequency) - 10; })

EDIT1

可能对我来说通过这是有用的

这是我的代码和小提琴,用于将rect和文本放在1组中。但是不确定如何用这种方法来控制文本标签对条形的回复,而不是用下面的答案呢?

代码语言:javascript
复制
 //create a bar group for the bar and the labels 
  barGroup = svg.append("g")
                                .attr("class", "barGroup")

  barGroup.selectAll(".bar")
      .data(data)
    .enter().append("rect")
      .attr("class", "bar")
      .attr("x", function(d) { return x(d.letter); })
      .attr("width", x.rangeBand())
      .attr("y", function(d) { return y(d.frequency); })
      .attr("height", function(d) { return height - y(d.frequency); });


barGroup.selectAll(".barText")
      .data(data)                                 
      .enter().append("text")
      .attr("class", "barText")
      .attr("x", function(d) { return x(d.letter); })
      .attr("y", function(d) { return y(d.frequency); })
      .text(function(d) { return d.frequency; });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 23:49:56

  1. 酒吧内部:.attr("y", function(d) { return Math.min(y(d.frequency) + 10, height); })
  2. 在酒吧顶部:.attr("y", function(d) { return y(d.frequency); })
  3. 酒吧底部:.attr("y", height)
  4. 酒吧中心:.attr("y", function(d) { return y(d.frequency/2); })

演示

若要水平对齐,请使用text-anchor: middle,并将文本与栏对齐,如下所示:

text.barText { text-anchor: middle; }

.attr("x", function(d) { return x(d.letter) + x.rangeBand()/2; })

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37311334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档