d3.js - 在条形图上方添加文本不显示

幸运1928

在学习了这个优秀的 d3.js 教程后,我喜欢在每个条形顶部添加条形值!下面的示例代码文本不显示!

XYZ.csv

year,value
2011,45
2012,47
2013,52
2014,70
2015,75
2016,78

html文件:

<!doctype html>
<html>
<head>
    <style>
        .bar {
            fill: steelblue;
        }
    </style>
    <script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<svg width="600" height="500"></svg>
<script>
var svg = d3.select("svg"),
            margin = 200,
            width = svg.attr("width") - margin,
            height = svg.attr("height") - margin


var xScale = d3.scaleBand().range([0, width]).padding(0.4),
            yScale = d3.scaleLinear().range([height, 0]);

var g = svg.append("g")
            .attr("transform", "translate(" + 100 + "," + 100 + ")");

    d3.csv("XYZ.csv", function(error, data) {
        if (error) {
            throw error;
        }

        xScale.domain(data.map(function(d) { return d.year; }));
        yScale.domain([0, d3.max(data, function(d) { return d.value; })]);

        g.append("g")
         .attr("transform", "translate(0," + height + ")")
         .call(d3.axisBottom(xScale));

        g.append("g")
         .call(d3.axisLeft(yScale).tickFormat(function(d){
             return "$" + d;
         }).ticks(10));

        g.selectAll(".bar")
         .data(data)
         .enter().append("rect")
         .attr("class", "bar")
         .attr("x", function(d) { return xScale(d.year); })
         .attr("y", function(d) { return yScale(d.value); })
         .attr("width", xScale.bandwidth())
         .attr("height", function(d) { return height - yScale(d.value); })
         .append("text")
         .attr("x", function(d) { return xScale(d.year); })
         .attr("y", function(d) { return yScale(d.value); })
         .attr("text", function(d) { return d.value; })
    });
</script>
</body>
</html>

为每个条形顶部的文本添加以下代码:

         .append("text")
         .attr("x", function(d) { return xScale(d.year); })
         .attr("y", function(d) { return yScale(d.value); })
         .attr("text", function(d) { return d.value; })
迈克尔·罗文斯基

不可能将 a 附加<text>到 a <rect>只需单独添加文本:

g.selectAll(".bar-title")
  .data(data)
  .enter()
  .append("text")
  .classed('bar-title', true)
  .attr('text-anchor', 'middle')
  .attr("x", d => xScale(d.year) + xScale.bandwidth()/2)
  .attr("y", d => yScale(d.value))
  .text(d => `$${d.value}`);

......或者,你可以追加一个<g>元素上enter(),然后追加<text><rect><g>

const data = [
{year: 2011, value: 45},
{year: 2012, value: 47},
{year: 2013, value: 52},
{year: 2014, value: 70},
{year: 2015, value: 75},
{year: 2016, value: 78}
];

var svg = d3.select("svg"),
            margin = 200,
            width = svg.attr("width") - margin,
            height = svg.attr("height") - margin


var xScale = d3.scaleBand().range([0, width]).padding(0.4),
            yScale = d3.scaleLinear().range([height, 0]);

var g = svg.append("g")
            .attr("transform", "translate(" + 100 + "," + 100 + ")");


        xScale.domain(data.map(function(d) { return d.year; }));
        yScale.domain([0, d3.max(data, function(d) { return d.value; })]);

        g.append("g")
         .attr("transform", "translate(0," + height + ")")
         .call(d3.axisBottom(xScale));

        g.append("g")
         .call(d3.axisLeft(yScale).tickFormat(function(d){
             return "$" + d;
         }).ticks(10));

        g.selectAll(".bar")
         .data(data)
         .enter().append("rect")
         .attr("class", "bar")
         .attr("x", function(d) { return xScale(d.year); })
         .attr("y", function(d) { return yScale(d.value); })
         .attr("width", xScale.bandwidth())
         .attr("height", function(d) { return height - yScale(d.value); })
         
        g.selectAll(".bar-title")
         .data(data)
         .enter()
         .append("text")
         .classed('bar-title', true)
         .attr('text-anchor', 'middle')
         .attr("x", d => xScale(d.year) + xScale.bandwidth()/2)
         .attr("y", d => yScale(d.value) - 5)
         .text(d => `$${d.value}`);
.bar {
  fill: steelblue;
 }
 
 .bar-title {
   font-family: 'Ubuntu';
 }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>
<svg width="600" height="500"></svg>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章