javascript - 在 d3.js 中使用重复图像模式绘制时间线图

标签 javascript d3.js dojo

我对 d3.js 非常陌生。我需要实现一个带有时间线的水平条。条形图的内容将是一系列图像模式。

任何人都可以帮助我找到实现该功能的方法,最好使用 d3.js 吗?

请查收附图。

enter image description here

最佳答案

我不会给出完整的答案,只是给出一个可能的框架(以及其他选项)

假设您的数据为成对列表(持续时间、事件),以及与事件匹配的图像列表:

var data = [{duration:15, event:0},
            {duration:5, event:1},
            {duration:25, event:0},
            ...
           ];
var img = ["black.png", "colorbar.png", ...];
var width = 25; //width of a frame
var scale = 4;  //time units per frame

您可以执行以下操作来获取片段的开始和结束位置以及帧列表:

var x=0;
var frames=[];
data.forEach(function(d) {
   d.position = x;
   var nFrames= Math.ceil(d.duration/scale);
   for (var i=0; i<nFrames; i++) {
     frames.push({event: d.event, position:x});       
     x+=width; 
   }
})

框架看起来像:[{event:0,position:0},{event:0,position:25},...]

现在您需要插入相应的图像:基本如下:

d3.select("svg")
  .selectAll(".frame")
  .data(frames)
  .enter()
  .append("image")
  .attr("class", "frame")
  .attr("x",function(d){return d.position})
  .attr("y",0)
  .attr("xlink:href",function(d){return img[d.event]});

这应该已经给你一个良好的开始,现在你可以自己尝试刻度和图例:)

关于javascript - 在 d3.js 中使用重复图像模式绘制时间线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35791589/

相关文章:

用于 SVG 转换的 Javascript 事件监听器

javascript - Dojo 1.4 如何绑定(bind)对象

javascript - 2500 次请求后 Google map 出现 OVER_QUERY_LIMIT 错误

javascript - 在 body 标签中放置一个 div

javascript - Dojo 无参数构造函数调用带参数的基础构造函数

javascript - D3js : Dropdown update in bar chart

javascript - 在没有翻译的情况下使用 d3 SVG Scale

javascript - Script 标签中的 djConfig 属性

javascript - 使用进度指示器时禁用/启用容器的子级

javascript - 如何删除Javascript创建的类?