在d3.js时间轴图表中添加图像而不是点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在d3.js时间轴图表中添加图像而不是点相关的知识,希望对你有一定的参考价值。

我有一个时间线图表,我想放置图标/图像而不是点。

问题1

我能够添加图像,但我需要根据数据动态添加。

g.selectAll(null)
 .data(temp)
 .enter()
 .append("image")
 .attr({'x':function(d){ console.log(d.x);return xScale(d.x); },
        'y':function(d){ return yScale(d.y); }
 })
 .attr("xlink:href", "Content/Images/1.png");

我有1.png到21.png的多个图像,因此根据输入数据我需要更改图像。

我该怎么办?

问题2

另一个问题是这是一个时间线图,所以当沿着x轴平移时,图像也应该平移,但在我的情况下,它是静态的。

如何使我的图像与x轴一起平移?

我添加了fiddle

编辑:

第二个问题的附加截图

答案

关于第一个问题:

g.selectAll(null)
 .data(temp)
 .enter()
 .append("image")
 .attr('x',function(d){ return xScale(d.x); })
 .attr('y',function(d){ return yScale(d.y); })
 .attr("xlink:href",function(d,i){
   return 'Content/Images/'+i+'.jpg'
 });

最后一个问题:

当xScale改变时:

g.selectAll('image')
.attr('x',function(d){ return xScale(d.x); }))

这改变了你的代码:

function zoomed(){
        svg.select('.x-axis').call(xAxis)
        g.selectAll('image').attr('x',function(d){          
            return xScale(d.x); })
        // svg.select('.y.axis').call(yAxis)

}

以上是关于在d3.js时间轴图表中添加图像而不是点的主要内容,如果未能解决你的问题,请参考以下文章

无需使用d3.js重新渲染数据的无限滚动条形图[关闭]

d3.js 将图例添加到多线系列图表

D3.JS 具有实时数据、平移和缩放的时间序列折线图

d3.js ----面积图表

d3.js地图图表绘制矩形

D3.js:使用图像(在数据中指定文件名)作为轴上的刻度值