我正在尝试一种方法,使路径可以并排显示,这样它们会相互推动(考虑宽度和相邻点),而不会重叠。
这是我的fiddle,大部分是从示例中拼凑而成的https://jsfiddle.net/crimsonbinome22/k2xqn24x/。
这是我的fiddle,大部分是从示例中拼凑而成的https://jsfiddle.net/crimsonbinome22/k2xqn24x/。
var LineGroup = svg.append("g")
.attr("class","line");
var line = d3.svg.line()
.interpolate("linear")
.x(function(d) { return (d.x); })
.y(function(d) { return (d.y); })
;
LineGroup.selectAll(".line")
.data(series)
.enter().append("path")
.attr("class", "line")
.attr("d", function(d){ return line(d.p); })
.attr("stroke", function(d){ return d.c; })
.attr("stroke-width", function(d){ return d.w; })
.attr("fill", "none");
我希望能在这张图片中实现以下目标:
- 对于所有落在同一点上的线条,将它们向左或向右推动,以便它们一起围绕该点居中。
- 考虑线条宽度,使它们不重叠,或者在它们之间留出空白。
- 能够处理具有不同点数的路径(示例中的最大值为3,但我想处理多达10个)。
- 请注意,重叠的点始终具有相同的索引(它们不会循环,而只是像树一样向外延伸)
- 能够处理落在同一点上的不同数量的线条。
我遇到的一些问题:
- 我刚开始接触d3,发现函数有点令人困惑。不确定如何开始应用逻辑来移动线条。
- 我的数据结构中有一些冗余信息,例如r代表排名(用于决定向左还是向右推)和w代表宽度,两者对于特定的线条始终相同。
- 我的数据很多,这里使用的数据结构无法处理我拥有的csv数据。现在可以跳过这个问题,稍后我会为此提出新问题。
我已经搜索了一下,但找不到任何示例来完成这个任务。从某种程度上说,它几乎像一个弦图,但有一些不同之处,我找不到可重用的相关代码。如果您能帮助我实现这个目标(无论是使用我已经开始的方法还是完全不同的方法),我将不胜感激。