D3:无法向图表添加文本元素

时间:2017-08-17 18:24:50

标签: javascript d3.js svg

除了文本元素之外,所有内容似乎都按预期工作。我似乎无法将文本元素附加到我的g元素。到目前为止,这是我的代码。我在Chrome浏览器中检查了DOM,但我没有看到任何文本元素,我不知道为什么。我使用此网站作为一种指南:https://www.dashingd3js.com/svg-text-element

另外,我知道元素应该相互叠加,因为它们都共享相同的x和y位置,我只是试图让元素首先出现。

var svg = d3.select('svg'),
margin = {top: 60, right: 20, bottom: 45, left: 60},
width = +svg.attr("width") - margin.left - margin.right,
height = +svg.attr("height") - margin.top - margin.bottom;

var x = d3.scaleBand().rangeRound([0, width]).padding(.1);
var y = d3.scaleLinear().range([height, 0]);

var g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain(test.map(function(d) { return d.level; }));
y.domain([0, d3.max(test, function(d) { return d.time; })]);

g.append("g")
    .attr("class", "axis axis--x")
    .attr("transform", "translate(0," + height + ")")
    .attr("writing-mode", "tb-rl")
    .call(d3.axisBottom(x).tickSize(0).tickPadding(10));

g.append("g")
    .attr("class", "axis axis--y")
    .call(d3.axisLeft(y).ticks(10))
    .append("text")
    .attr("transform", "rotate(-90)")
    .attr("y", 9)
    .attr("dy", "0.71em")
    .attr("text-anchor", "end")
    .text("Frequency")

g.selectAll(".bar")
    .data(test)
    .enter()
    .append("rect")
    .attr("class", "bar")
    .attr("x", function(d) { return x(d.level); })
    .attr("y", function(d) { return y(d.time); })
    .attr("width", x.bandwidth())
    .attr("height", function(d) { return height - y(d.time); })

var text = g.selectAll("text")
    .data(test).enter()
    .append("text");

var textLabels =    text.attr("x", 100)
    .attr("y", 100)
    .text("testing")
    .attr("fill", "blue")

1 个答案:

答案 0 :(得分:0)

您的选择g.selectAll("text")将包含您在代码前面附加到g元素的轴中的文本,因此您的“输入”中不会包含任何内容。 D3将传入数据与选择中的项目进行比较,如果未指定键,则将对每个项目中的元素数量进行简单比较,然后相应地添加(输入)和删除(退出)。 / p>

如果您将选择更改为您尚未在DOM中显示的内容(即空选项),例如g.selectAll(".label"),那么当您附加数据时,输入选择将包含您的新文本标签