javascript - 在 Google Charts 中使用条形图创建时间线?

标签 javascript charts google-visualization

我想用 Google 图表创建一个时间线来显示事件的持续时间、重复和重叠。每行应该是一个新事件,列应该是时间增量。

我一直在查看 Google Charts docs ,然而,它看起来不像我想要的是可能的 - 不仅要对水平条的长度进行排列,而且要在同一行中有多个排列的条(不重叠)。

这可以通过 Chrome 或其他免费图表库实现吗?

编辑:我想生成一个类似于下面的图表 enter image description here

最佳答案

我有 100% 的信心可以在 Google Visualization 中重新创建它,但由于我无法弄清楚的奇怪行为(红线标记日期),我有点短了。如果你能解决那个问题,剩下的就很好,看起来像这样:

Sample Image

代码如下:

function drawVisualization() {
  // Create and populate the data table.
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Assignment');
  data.addColumn('date', 'Dummy');
  data.addColumn('date', 'Current Assignment');
  data.addColumn('date', 'Dummy');
  data.addColumn('date', 'Next Assignment');
  data.addRows([
    ['Uranus', new Date(1298246400000), {v:new Date(26092800000), f:'2/21-12/20'}, new Date(0), {v:new Date(0), f:'1/0-1/0'}],
    ['Thomas Lamonthezie', new Date(1297036800000), {v:new Date(6393600000), f:'2/7-4/22'}, new Date(0), {v:new Date(0), f:'1/0-1/0'}],
    ['Shuo Li', new Date(0), {v:new Date(0), f:'1/0-1/0'}, new Date(1303689600000), {v:new Date(2937600000), f:'4/25-5/29'}],
    ['Saturne', new Date(1298246400000), {v:new Date(4579200000), f:'2/21-4/15'}, new Date(0), {v:new Date(0), f:'1/0-1/0'}],
    ['Roger Erwin', new Date(1301875200000), {v:new Date(1555200000), f:'4/4-4/22'}, new Date(259200000), {v:new Date(2160000000), f:'4/25-5/20'}],
    ['Rick Maverick', new Date(1302652800000), {v:new Date(2592000000), f:'4/13-5/13'}, new Date(0), {v:new Date(0), f:'1/0-1/0'}],
  ]);

  //Define date ranges for the chart
  var dateMin = new Date(2010,11,1);
  var dateMax = new Date(2012,0,1);
  var dateToday = new Date(2012,3,15);


  // Create and draw the visualization.
  new google.visualization.BarChart(document.getElementById('visualization')).
    draw(data,
         {width:600, height:400,
          isStacked: true,
          series: [{color: 'transparent'},{},{color: 'transparent'},{}],
          hAxis: {
            viewWindow: {
              max: dateMax,
              min: dateMin,
            },
            baseline: dateToday,
            baselineColor: 'red',
          },
         }
        );
}

基本上,您创建了 4 个系列:

  1. 虚拟系列(第一次作业前的时间)
  2. 第一次作业的持续时间
  3. 虚拟系列(第一次和第二次作业之间的时间)
  4. 第二次作业的持续时间

然后将系列 1 和系列 3 设置为不可见。

对于数据,您必须进行一些日期数学运算(我在 Excel 中进行了计算,抱歉),但基本上您只需减去每个作业的开始/结束日期即可获得持续时间,并将虚拟对象设置为开始日期第二个任务的时间减去第一个任务的时间加上第一个任务的持续时间。

我使用了 {value: x, format: y} 技巧使鼠标悬停正常工作。您可以自动执行此操作(同样,我在 excel 中处理数据,因为我的 javascript 会花费更长的时间)。

然后设置设置最小日期,最大日期,将系列变成合适的颜色,并将基线设置为红色。不幸的是,出于我无法理解的原因,无论日期设置如何,基线都希望位于图表的左侧。如果您能找到解决方法,您就有了图表。

关于javascript - 在 Google Charts 中使用条形图创建时间线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219413/

相关文章:

javascript - Vue.js 的 if 语句存在问题。工作起来真的很奇怪

javascript - 如何防止很小的数字转换为科学记数法?

javascript - 在 highchart 中,Y 轴绘图线标签被 chop

javascript - 使用 PHP 和 mysql 的 morrisJS 条形图人口

php - 如何使用 PHP、MySQL 和 Google Charts 工具在折线图 drwan 中绘制多条线?

javascript - 谷歌图表 : How to make differential timeline

javascript - PHP:如何获得当前的 innerHTML?

javascript - 从对象值检索图像 url - Angular JS

swift - 模拟单击/双击 Swift

javascript - 加载图表后如何获取 Google Visualization DataTable 数据?