将多个文本元素添加到 svg 元素的问题
Issue adding multiple text elements to svg elements
使用基于 D3 的 code 平行坐标,我正在尝试添加一些文本:
g_data.select(".label")
.text(dimensionLabels) //visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //not visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible
到之前创建的svg:text和svg:tspan元素:
var g_data = pc.svg.selectAll(".dimension").data(pc.getOrderedDimensionKeys());
// Enter
g_data.enter()
.append("svg:g")
.attr("class", "dimension")
.attr("transform", function(p) { return "translate(" + position(p) + ")"; })
.style("opacity", 0)
.append("svg:g")
.attr("class", "axis")
.attr("transform", "translate(0,0)")
.each(function(d) {
var axisElement = d3.select(this).call( pc.applyAxisConfig(axis, __.dimensions[d]) );
axisElement.selectAll("path")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");
axisElement.selectAll("line")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");
})
.append('svg:text') //1st part of label
.attr({
"text-anchor": "middle",
"y": -40,
"x": 0,
"dy": 0,
"class": "label"
})
.append('svg:tspan') //2nd part of label
.attr({
"x": 0,
"dy": 17,
"class": "sublabel1"
})
.append('svg:tspan') //3rd part of label
.attr({
"x": 0,
"dy": 14,
"class": "sublabel2"
})
问题是由于我无法解释的原因,这只能部分起作用:一次只能显示一个文本标签。
更具体地说,对于上述情况,文本只会添加到“.label”class svg,而其他两个是不可见的。但是,如果我注释掉前两行(如下所示),那么 sublabel1 就会变得可见,依此类推。
//g_data.select(".label")
// .text(dimensionLabels) //with this part commented, the next label becomes visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible
谁能帮忙弄清楚是什么原因造成的,我该怎么做才能同时显示所有标签?非常感谢!
小心链接到 append
的调用。 append
returns 附加元素,因此链接 appends
将创建一个嵌套结构。
<text class="label">
<tspan class="sublabel1">
<tspan class="sublabel2"></tspan>
</tspan>
</text>
重要的是要注意,设置 text
元素的文本将删除其中的任何 tspans
,大概是因为 tspans
算作文本。
你想要这样的东西
<text>
<tspan class="label"></tspan>
<tspan class="sublabel1"></tspan>
<tspan class="sublabel2"></tspan>
</text>
因此,创建一个 text
节点,将其保存到一个变量,然后将 tspans
附加到该变量。
使用基于 D3 的 code 平行坐标,我正在尝试添加一些文本:
g_data.select(".label")
.text(dimensionLabels) //visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //not visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible
到之前创建的svg:text和svg:tspan元素:
var g_data = pc.svg.selectAll(".dimension").data(pc.getOrderedDimensionKeys());
// Enter
g_data.enter()
.append("svg:g")
.attr("class", "dimension")
.attr("transform", function(p) { return "translate(" + position(p) + ")"; })
.style("opacity", 0)
.append("svg:g")
.attr("class", "axis")
.attr("transform", "translate(0,0)")
.each(function(d) {
var axisElement = d3.select(this).call( pc.applyAxisConfig(axis, __.dimensions[d]) );
axisElement.selectAll("path")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");
axisElement.selectAll("line")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");
})
.append('svg:text') //1st part of label
.attr({
"text-anchor": "middle",
"y": -40,
"x": 0,
"dy": 0,
"class": "label"
})
.append('svg:tspan') //2nd part of label
.attr({
"x": 0,
"dy": 17,
"class": "sublabel1"
})
.append('svg:tspan') //3rd part of label
.attr({
"x": 0,
"dy": 14,
"class": "sublabel2"
})
问题是由于我无法解释的原因,这只能部分起作用:一次只能显示一个文本标签。
更具体地说,对于上述情况,文本只会添加到“.label”class svg,而其他两个是不可见的。但是,如果我注释掉前两行(如下所示),那么 sublabel1 就会变得可见,依此类推。
//g_data.select(".label")
// .text(dimensionLabels) //with this part commented, the next label becomes visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible
谁能帮忙弄清楚是什么原因造成的,我该怎么做才能同时显示所有标签?非常感谢!
小心链接到 append
的调用。 append
returns 附加元素,因此链接 appends
将创建一个嵌套结构。
<text class="label">
<tspan class="sublabel1">
<tspan class="sublabel2"></tspan>
</tspan>
</text>
重要的是要注意,设置 text
元素的文本将删除其中的任何 tspans
,大概是因为 tspans
算作文本。
你想要这样的东西
<text>
<tspan class="label"></tspan>
<tspan class="sublabel1"></tspan>
<tspan class="sublabel2"></tspan>
</text>
因此,创建一个 text
节点,将其保存到一个变量,然后将 tspans
附加到该变量。