我一直在研究可视化并让它能够精确地对x轴进行线性缩放(d3.scale.linear()
),但x轴确实是顺序的,因此我现在回过头来尝试切换到使用d3.scale.ordinal()
。
可视化就在这里 http://bl.ocks.org/natemiller/raw/f9aa776243c9035f75b2/
我已经取得了一些进展,但我还有两个问题尚待解决。
我想指定x轴上值的顺序。目前这些值是数字(1,2,3 ..)所以目前我希望它们按升序排列,但后来我会使用更多信息标签,并希望能够指定它们的顺序。
数据点与x轴标签不对齐,我不知道为什么。我想我可能需要翻译数据以便排队,但我不确定这是否正确。我将x轴范围指定为rangeBands并使用它来设置圆位置,但显然在此规范中存在一些错误。
感谢您的帮助。
PS:这是一个不同的问题,但我想知道是否有一种随机的方法,向圆圈引入一个非常小的“抖动”,使它们相互重叠。这有时在静态图中完成,可能是此可视化的一个有趣的补充。或者它可能会使它变得混乱。内特
答案 0 :(得分:4)
序数比例的值的顺序是您将它们赋予.domain()
的顺序。也就是说,只需将您想要的订单传递给.domain()
,它就可以正常工作。
您对圆圈和标签排列的问题是因为您没有考虑范围乐队的大小。也就是说,圆圈将位于范围带的开头,标签位于中心。设置x坐标的代码应该类似于
.attr("cx", function (d) { return x(d[axes.xAxis]) + x.rangeBand()/2; })
另请注意,您可能希望对传递给x.domain()
的数字进行排序 - 目前最后一个值小于之前的值。
关于“抖动”,一种简单的方法是在圆的坐标上添加一个小的随机数。在d3中没有明确支持,但实施起来很简单。