2015-05-27 15 views
1

我想建立一個甘特圖在此的jsfiddle例如 [http://jsfiddle.net/2xkfm87e/11/(我現在已經更新了這個小提琴使用下面jlbriggs'輸入的工作版本也。包括我需要的一些其他選項 - 每個區間都有一個工具提示。)Highcharts甘特圖 - 需要允許類不帶數據

但是,即使一個或多個類別沒有任何關聯數據,我也需要顯示所有類別。最終用戶需要意識到沒有與該類別相關的數據。在我的JSFiddle示例中,我能想到的最好方法就是使用最初的日期,並創建一個通知用戶該類別沒有數據的點。我寧願它是空的。

任何幫助,將不勝感激!

$(function() { 
     // Define tasks 
     var tasks = [{ 
      name: 'Category 1', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2010,5, 21), 
       to: Date.UTC(2015, 5, 21), 
       label: 'Category 1' 
      }] 
     }, { 
      name: 'Category 2- Should be null', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2010,5, 21), 
       to: Date.UTC(2010, 5, 21), 
       label: 'Category 2- Should be null' 
      }] 
     }, { 
      name: 'Category 3', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2011,05,16), 
       to: Date.UTC(2012,03,21), 
       label: 'Category 3' 
      }, { 
       from: Date.UTC(2013,07,09), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 3' 
      }] 
     }, { 
      name: 'Category 4', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,07,18), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 4' 
      }] 
     }, { 
      name: 'Category 5', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,06,17), 
       to: Date.UTC(2014,04,21), 
       label: 'Category 5' 
      }, { 
       from: Date.UTC(2015,01,22), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 5' 
      }] 
     }, { 
      name: 'Category 6', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,06,17), 
       to: Date.UTC(2014,04,21), 
       label: 'Category 6' 
      }, { 
       from: Date.UTC(2015,01,22), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 6' 
      }] 
     }, { 
      name: 'Category 7', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,06,17), 
       to: Date.UTC(2014,04,21), 
       label: 'Category 7' 
      }, { 
       from: Date.UTC(2015,01,22), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 7' 
      }] 
     }, { 
      name: 'Category 8', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,06,17), 
       to: Date.UTC(2014,04,21), 
       label: 'Category 8' 
      }, { 
       from: Date.UTC(2015,01,22), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 8' 
      }] 
     }, { 
      name: 'Category 9', 
      intervals: [{ // From-To pairs 
       from: Date.UTC(2013,06,17), 
       to: Date.UTC(2014,04,21), 
       label: 'Category 9' 
      }, { 
       from: Date.UTC(2015,01,22), 
       to: Date.UTC(2015,05,22), 
       label: 'Category 9' 
      }] 
     }]; 

     // Define milestones 
     /*var milestones = [{ 
      name: 'Get to bed', 
      time: Date.UTC(0, 0, 0, 22), 
      task: 1, 
      marker: { 
       symbol: 'triangle', 
       lineWidth: 1, 
       lineColor: 'black', 
       radius: 8 
      } 
     }]; 
      */ 
     // re-structure the tasks into line seriesvar series = []; 
     var series = []; 
     $.each(tasks.reverse(), function(i, task) { 
      var item = { 
       name: task.name, 
       data: [] 
      }; 
      $.each(task.intervals, function(j, interval) { 
       item.data.push({ 
        x: interval.from, 
        y: i, 
        label: interval.label, 
        from: interval.from, 
        to: interval.to 
       }, { 
        x: interval.to, 
        y: i, 
        from: interval.from, 
        to: interval.to 
       }); 

       // add a null value between intervals 
       if (task.intervals[j + 1]) { 
        item.data.push(
         [(interval.to + task.intervals[j + 1].from)/2, null] 
        ); 
       } 

      }); 

      series.push(item); 
     }); 

     // restructure the milestones 
     /*$.each(milestones, function(i, milestone) { 
      var item = Highcharts.extend(milestone, { 
       data: [[ 
        milestone.time, 
        milestone.task 
       ]], 
       type: 'scatter' 
      }); 
      series.push(item); 
     }); 
      */ 

     // create the chart 
     var chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container' 
      }, 

      title: { 
       text: 'Category History' 
      }, 

      xAxis: { 
       type: 'datetime' 
      }, 

      yAxis: { 

       categories: ['Category 9', 
          'Category 8', 
          'Category 7', 
          'Category 6', 
          'Category 5', 
          'Category 4', 
          'Category 3', 
          'Category 2', 
          'Category 1'], 
       tickInterval: 1,    
       tickPixelInterval: 200, 
       labels: { 
        style: { 
         color: '#525151', 
         font: '12px Helvetica', 
         fontWeight: 'bold' 
        }, 
        /* formatter: function() { 
         if (tasks[this.value]) { 
          return tasks[this.value].name; 
         } 
        }*/ 
       }, 
       startOnTick: false, 
       endOnTick: false, 
       title: { 
        text: 'Criteria' 
       }, 
       minPadding: 0.2, 
       maxPadding: 0.2, 
        fontSize:'15px' 

      }, 

      legend: { 
       enabled: false 
      }, 
      tooltip: { 
       formatter: function() { 
        return '<b>'+ tasks[this.y].name + '</b><br/>' + 
         Highcharts.dateFormat('%m-%d-%Y', this.point.options.from) + 
         ' - ' + Highcharts.dateFormat('%m-%d-%Y', this.point.options.to); 
       } 
      }, 

      plotOptions: { 
       line: { 
        lineWidth: 10, 
        marker: { 
         enabled: false 
        }, 
        dataLabels: { 
         enabled: true, 
         align: 'left', 
         formatter: function() { 
          return this.point.options && this.point.options.label; 
         } 
        } 
       } 
      }, 

      series: series 

     });   
    }); 
+0

無法訪問您的小提琴,因爲它是使用您的小提琴帳戶創建的。所以它不是piblic –

+0

對不起,這個鏈接是固定的。 –

回答

2

即使沒有數據,Highcharts默認行爲將顯示類別,除非它是第一個或最後一個類別。

你可以改變你的輸入數組有一個空intervals陣列,你的情況:

如果你需要的第一個或最後一類是空的,你需要設置在Y軸上的min和max:

+0

正是我需要的!謝謝! –

+0

@jlbriggs我遇到了這個問題,並想知道是否有可能在一個部分獲得多條線條。例如:類別2將有兩條線,垂直疊放而不接觸。有任何想法嗎? – NorCalKnockOut

+1

@NorCalKnockOut - 您可以使用x值,如下所示:http://jsfiddle.net/jlbriggs/3d3fuhbb/108/在需要共享某個類別的系列的類別索引下方或上方使用小數值。 – jlbriggs