D3 x轴长标签重叠
D3 X-Axis long label overlapping
我有一个D3条形图,x轴标签相互重叠。我有以下内容:
//x轴换行
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
试图在http://bl.ocks.org/mbostock/7555321后面添加必要的函数,但无效。有人能给点建议吗?
function wrap(text, width) {
text.each(function() {
var text = d3.select(this),
words = text.text().split(/'s+/).reverse(),
word,
line = [],
lineNumber = 0,
lineHeight = 1.1, // ems
y = text.attr("y"),
dy = parseFloat(text.attr("dy")),
tspan = text.text(null).append("tspan").attr("x", 0).attr("y", y).attr("dy", dy + "em");
while (word = words.pop()) {
line.push(word);
tspan.text(line.join(" "));
if (tspan.node().getComputedTextLength() > width) {
line.pop();
tspan.text(line.join(" "));
line = [word];
tspan = text.append("tspan").attr("x", 0).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word);
}
}
});
谢谢。
而不是仅仅设置位置甚至宽度必须设置,但没有办法你可以设置宽度像svg文本标签中的html标签,而你可以简单地添加多个tspan
和相对顶部应该改变,这就是为什么在你的功能dy
的tspan
被设置为lineNumber * lineHeight + dy
。
在下面的代码中,.selectAll(".tick text")
将选择tick
类标签内的所有文本标签。
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis)
.selectAll(".tick text")
.call(wrap, x.rangeBand());
看看你的代码,你有wrap
函数,但它不是bean调用。应该调用它来格式化文本。
调用将使用第一个参数(选择的svg对象)和第二个参数(传递的参数)调用函数。
因此,对于具有tick
类的标签中的每个文本标签,wrap
函数将首先使用svg文本对象属性调用,然后使用x.rangeBand()
的值调用。
你的wrap
函数复制文本对象中的字符串,通过将其吐出到单词列表中,然后通过text.text(null)
清空文本标记内容。
一旦text
对象为空,它会添加一个tspan
标签,并设置文本,使长度不超过给定的宽度,如果还有更多的单词,那么它会追加另一个tspan
,直到添加所有的单词。
你可以在text
标签中找到多个tspan
标签,每个标签的文本都小于或等于宽度(只需检查元素)。
相关文章:
- Cordova AngularJS Ionic标签的内容在第一次加载时重叠
- 高图表数据标签重叠
- Highcharts单行堆叠水平条:标签重叠---条形段太小而无法读取“dataLabels”---(更改“dataLa
- 有没有办法防止 xaxis 标签在 flot.js 条形图中重叠
- 弹出窗口中的槽线图具有重叠的轴标签
- 高图表 - 日期时间轴标签重叠
- 如何修复标签的位置,使它们不会在DevExpress js图表中重叠
- 浮动:堆叠条形图标签重叠/不显示
- 合并嵌套的、重叠的<strong>并且<em>标签
- 高图重叠标签不应该被隐藏
- 与静态内容重叠的输入标签
- 标签重叠的预填充内容在物化
- 高图:饼图标签重叠
- 如何避免高图饼图中数据标签的重叠
- 像素距离在谷歌地图(API V3),以避免重叠的标签/覆盖
- 使用(out) execCommand自定义样式(如何处理重叠的标签)
- D3:饼式标签的“水平”尾线没有重叠
- 高图表与类别标签重叠
- D3 x轴长标签重叠
- 停止d3圆包装标签重叠