你运行到这里的几个问题:
- 因为你所做的x轴的时间尺度,我猜你真正想要的价格是变量y,而日期是x变量。这就是为什么
x(d.price)
是消极的--D3正试图将价格解释为日期,而这最终并没有太大意义。因此,用上面的代码替换上面的代码行:.attr('cy', function(d){ return y(d.price) })
- 为了实际上有可见的圆,它们需要设置三个参数:
cx
,cy
和r
。由于d3已经知道您的x轴是时间刻度,因此您可以使用.attr('cx', function(d){ return x(d.date) })
来设置cx
。您可以将r
设置为您想要圈选的半径。只需选择一个,或默认为0,您将无法看到圈子。例如,.attr('r', 4)
会将半径设置为完全可见的值4.
- 您在绘制线条之前正在绘制圆。结果,这些线条被画在圆圈上,看起来很奇怪。因此,如果您想避免这种情况,请将圆圈代码移至行代码后面。
全部放在一起,这大致是创建你的圈子中的代码应该是什么样子,你声明var paths
后,应该去:
var circles = company.selectAll('circle')
.data(function(d){ return d.values; })
.enter().append('circle')
.attr('cy', function(d){
return y(d.price);}) //Price is the y variable, not the x
.attr('cx', function(d){
return x(d.date);}) //You also need an x variable
.attr('r',4); //And a radius - otherwise your circles have
//radius 0 and you can't see them!
更新jsbin: http://jsbin.com/gorukojoxu/edit?html,console,output
谢谢您!这很有道理,我想我昨天盯着屏幕太长了。任何想法如何使点与每个机会的路径具有相同的颜色? – tr3online
如果你的数据集中不会有数量可观的公司,最简单的做法可能就是给每个人一个颜色属性并调用它。 – seaotternerd
我刚刚做了一些hacky'd3.select(this.parentNode.parentNode).datum()。color'。它目前适用。再次感谢您的帮助。 – tr3online