除了文本元素之外,所有内容似乎都按预期工作。我似乎无法将文本元素附加到我的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")
答案 0 :(得分:0)
您的选择g.selectAll("text")
将包含您在代码前面附加到g元素的轴中的文本,因此您的“输入”中不会包含任何内容。 D3将传入数据与选择中的项目进行比较,如果未指定键,则将对每个项目中的元素数量进行简单比较,然后相应地添加(输入)和删除(退出)。 / p>
如果您将选择更改为您尚未在DOM中显示的内容(即空选项),例如g.selectAll(".label")
,那么当您附加数据时,输入选择将包含您的新文本标签