2014-07-15 1 views
3

atlasboard 및 인력거를 사용하여 대시 보드를 만들려고합니다. 이제 기본적으로 atlasboard는 검은 색 배경을 가지며 그래프를 만들 때 x 축과 y 축을 볼 수 없습니다 (예 : WIKI markdown analytics).아틀라스 보드 및 인력거

당신은 골드 피처의 devs 백색과 x 축 보여 관리가 나타납니다 공식 atlasboard 페이지에서 아래의 예와 스크린 샷을보고, 그렇게 궁금하면 :

  • 를 그들이 그것을 어떻게 인력거 와 함께 이것을 달성 할 수없는 것처럼.

  • nodejs에서 설정해야 할 CSS가 있습니까? 설정이 필요합니까?

  • 또는 심지어 다른 그래프 프레임 워크가 인력거 (및 그 방법) 이외에 사용되어야합니까?

누군가 설명해 주시겠습니까?

Atlasboard

갱신 1 다음과 같은 답 :

가 나는 위젯 내에서 다음을 추가했습니다 :

widget = { 
//runs when we receive data from the job 
onData: function(el, data) { 

     function drawDashLine(val, max, min) { 

     var container = $('.content', el), 
      viewport = { 
       height: container.height(), 
       width: container.width() 
      }, 
      topPosition = (viewport.height - Math.ceil(val/max * viewport.height)); 

     var dashedLineLine = $('<hr />') 
      .attr('class', 'dashedLine') 
      .css({ 
       width: el.width() - 40, 
       top: topPosition + 'px' 
      }); 

     var lineLabel = $("<span />") 
      .attr('class', 'lineLabel') 
      .css({ 
       top: topPosition + 'px' 
      }) 
      .text(val); 

     container.append(dashedLineLine, lineLabel); 
    } 

    function paintMinMax(series) { 

     var mergedData = []; 

     for (var i = series.length - 1; i >= 0; i--) { 
      mergedData = mergedData.concat(series[i].data); 
     }; 

     var min = _.min(_.pluck(mergedData, 'y')), 
      max = _.max(_.pluck(mergedData, 'y')), 
      mid = Math.round(max/2); 

     drawDashLine(min, max, min); 
     drawDashLine(mid, max, min); 
     drawDashLine(max, max, min); 
    } 

    function paintTimeMark(chartWidth, chartHeight, startDate, endDate, timeMarkData) { 

     if (!timeMarkData || !timeMarkData.length) { 
      return; 
     } 

     var chartLengthMs = endDate - startDate; 

     for (var i = 0, l = timeMarkData.length; i < l; i++) { 

      var timeMark = timeMarkData[i]; 

      // are we in the boundaries? 
      if ((timeMark.epoch < startDate) || (timeMark.epoch > endDate)){ 
       continue; // out of boundaries 
      } 

      var lengthOfTimemark = timeMark.epoch - startDate; 

      var percentage = (lengthOfTimemark/chartLengthMs); 

      var leftPosition = Math.round(chartWidth * percentage); 

      var top = timeMark.top || 0; 
      var markHeight = chartHeight - top; 
      var color = timeMark.color || 'orange'; 

      var mark = $('<div>') 
       .attr('class', 'mark') 
       .css({ 
        left: leftPosition + 'px', 
        'margin-top': top + 'px', 
        'background-color' : color, 
        'height': markHeight + 'px' 
       }); 


      var legend = $('<span>') 
       .attr('class', 'legend') 
       .css({ 
        left: leftPosition + 'px', 
        'margin-top': top + 'px', 
        'height': markHeight + 'px' 
       }) 
       .hide() 
       .text(timeMark.name); 

      $('.content', el).append(mark, legend); 

      var center = Math.round((legend.width() - (mark.width()))/2); 

      // center align legend 
      (function(legend, center){ 
       setTimeout(function(){ 
        legend.css({ 
         'margin-left': (-(center)) + 'px' 
        }).fadeIn(); 
       },600); 
      }(legend, center)); 
     } 
    } 


    function paintChart(width, height, series, color) { 

     for (var i = series.length - 1; i >= 0; i--) { 
      series[i].data = formatData(series[i].data); 
     } 

     var graph = new Rickshaw.Graph({ 
      element: $('.graph', el)[0], 
      width: width, 
      height: height, 
      renderer: 'line', 
      offset: 'expand', 
      series: series 
     }); 

     var xAxis = new Rickshaw.Graph.Axis.Time({ 
      graph: graph, 
      timeFixture: new Rickshaw.Fixtures.Time.Local() 
     }); 

     xAxis.render(); 
     graph.render(); 
    } 

    function formatData(rawData) { 

     var sortedData = _.sortBy(rawData, function(num) { 
      return num.date; 
     }); 

     return _.map(sortedData, function(e) { 

      var ret = { 
       x: e.date, 
       y: e.sum 
      }; 

      return ret; 
     }); 
    } 

    var init = function() { 

     if (data.title) { 
      $('h2', el).text(data.title); 
     } 

     if ($('.graph', el).hasClass('rickshaw_graph')) { 
      $('.graph', el).empty(); 
     } 

     if (!data.series.length) { 
      console.error('There is no results to paint the chart'); 
      return; 
     } 

     // paint chart 
     var width = el.width() - 50; 
     var height = el.closest('li').height() - 80; 
     paintChart(width, height, data.series, data.color || 'yellow'); 

     // paint min max dash 
     paintMinMax(data.series); 

     // paint time marks 
     paintTimeMark(width, height, data.startDate, data.endDate, data.timeMarks); 

    }(); 




} 
}; 

그런 다음 작업에서 내가 추가 한 :

module.exports = function(config, dependencies, job_callback) { 
var text = "Hello World!"; 


var date1 = (new Date(2014, 4, 2, 1, 30, 0, 0))/1000; 
var date2 = (new Date(2014, 5, 3, 2, 30, 0, 0))/1000; 
var date3 = (new Date(2014, 6, 4, 3, 30, 0, 0))/1000; 
var date4 = (new Date(2014, 7, 6, 4, 30, 0, 0))/1000; 

var totalBacklogDefects = [{ x: date1, y : 40}, 
{ x: date2, y : 30}, 
{ x: date3, y : 23},  { x: date4, y : 10} ] ; 
var blockedDefects = [{ x: date1, y : 32}, { x: date2, y : 22}, 
    { x: date3, y : 3}, { x: date4, y : 5} ] ; 
var fixedDefects = [{ x: date1, y : 2}, { x: date2, y : 12}, 
{ x: date3 ,y : 20}, { x: date4, y : 25} ] ; 


var series = [ 
      { 

       data: totalBacklogDefects , 
       color: 'steelblue', 
       name: 'Total Backlog' 
      }, 
      { 
       data: blockedDefects , 
       color: 'red', 
       name: 'Blocked Defects' 
      }, 
      { 
       data: fixedDefects, 
       color: 'green', 
       name: 'Fixed' 
      } 
     ]; 


var timeMarks = [ 
       { 
        top: 0, 
        color: 'red', 
        name: 'test2', 
        epoch: date2 

       }, 
       { 
        top: 0, 
        color: 'blue', 
        name: 'test1', 
        epoch: date3 

       } 

]; 

job_callback(null, {title: "Graph Sandbox", series: series, startDate: date1 , 
endDate : date4 , timeMarks: timeMarks}); 
}; 

내 htm에 관해서는 l 페이지 다음을 추가했습니다 :

<h2>graphsandbox</h2> 
<div class="content"> 
<div class="graph rickshaw_graph"></div> 

</div> 

현재이 방법으로 빈 상자 만 렌더링되는지 여부를 알려주십시오. 당신은 스크린 샷에서 볼

답변

1

차트 위젯은 내부 패키지에 속하지만 난 당신과 공유 할 수 있습니다 : 당신이 당신의 자신의 차트 위젯 check Rickshaw's examples을 만들 수 있도록

인력거가 전 세계적으로 어쨌든 사용할 수 있습니다.

widget = { 

onData: function(el, data) { 

    function drawDashLine(val, max, min) { 

     var container = $('.content', el), 
      viewport = { 
       height: container.height(), 
       width: container.width() 
      }, 
      topPosition = (viewport.height - Math.ceil(val/max * viewport.height)); 

     var dashedLineLine = $('<hr />') 
      .attr('class', 'dashedLine') 
      .css({ 
       width: el.width() - 40, 
       top: topPosition + 'px' 
      }); 

     var lineLabel = $("<span />") 
      .attr('class', 'lineLabel') 
      .css({ 
       top: topPosition + 'px' 
      }) 
      .text(val); 

     container.append(dashedLineLine, lineLabel); 
    } 

    function paintMinMax(series) { 

     var mergedData = []; 

     for (var i = series.length - 1; i >= 0; i--) { 
      mergedData = mergedData.concat(series[i].data); 
     }; 

     var min = _.min(_.pluck(mergedData, 'y')), 
      max = _.max(_.pluck(mergedData, 'y')), 
      mid = Math.round(max/2); 

     drawDashLine(min, max, min); 
     drawDashLine(mid, max, min); 
     drawDashLine(max, max, min); 
    } 

    function paintTimeMark(chartWidth, chartHeight, startDate, endDate, timeMarkData) { 

     if (!timeMarkData || !timeMarkData.length) { 
      return; 
     } 

     var chartLengthMs = endDate - startDate; 

     for (var i = 0, l = timeMarkData.length; i < l; i++) { 

      var timeMark = timeMarkData[i]; 

      // are we in the boundaries? 
      if ((timeMark.epoch < startDate) || (timeMark.epoch > endDate)){ 
       continue; // out of boundaries 
      } 

      var lengthOfTimemark = timeMark.epoch - startDate; 

      var percentage = (lengthOfTimemark/chartLengthMs); 

      var leftPosition = Math.round(chartWidth * percentage); 

      var top = timeMark.top || 0; 
      var markHeight = chartHeight - top; 
      var color = timeMark.color || 'orange'; 

      var mark = $('<div>') 
       .attr('class', 'mark') 
       .css({ 
        left: leftPosition + 'px', 
        'margin-top': top + 'px', 
        'background-color' : color, 
        'height': markHeight + 'px' 
       }); 


      var legend = $('<span>') 
       .attr('class', 'legend') 
       .css({ 
        left: leftPosition + 'px', 
        'margin-top': top + 'px', 
        'height': markHeight + 'px' 
       }) 
       .hide() 
       .text(timeMark.name); 

      $('.content', el).append(mark, legend); 

      var center = Math.round((legend.width() - (mark.width()))/2); 

      // center align legend 
      (function(legend, center){ 
       setTimeout(function(){ 
        legend.css({ 
         'margin-left': (-(center)) + 'px' 
        }).fadeIn(); 
       },600); 
      }(legend, center)); 
     } 
    } 

    function paintChart(width, height, series, color) { 

     for (var i = series.length - 1; i >= 0; i--) { 
      series[i].data = formatData(series[i].data); 
     } 

     var graph = new Rickshaw.Graph({ 
      element: $('.graph', el)[0], 
      width: width, 
      height: height, 
      renderer: 'line', 
      offset: 'expand', 
      series: series 
     }); 

     var xAxis = new Rickshaw.Graph.Axis.Time({ 
      graph: graph, 
      timeFixture: new Rickshaw.Fixtures.Time.Local() 
     }); 

     xAxis.render(); 
     graph.render(); 
    } 

    function formatData(rawData) { 

     var sortedData = _.sortBy(rawData, function(num) { 
      return num.date; 
     }); 

     return _.map(sortedData, function(e) { 

      var ret = { 
       x: e.date, 
       y: e.sum 
      }; 

      return ret; 
     }); 
    } 

    var init = function() { 

     if (data.title) { 
      $('h2', el).text(data.title); 
     } 

     if ($('.graph', el).hasClass('rickshaw_graph')) { 
      $('.graph', el).empty(); 
     } 

     if (!data.series.length) { 
      console.error('There is no results to paint the chart'); 
      return; 
     } 

     // paint chart 
     var width = el.width() - 50; 
     var height = el.closest('li').height() - 80; 
     paintChart(width, height, data.series, data.color || 'yellow'); 

     // paint min max dash 
     paintMinMax(data.series); 

     // paint time marks 
     paintTimeMark(width, height, data.startDate, data.endDate, data.timeMarks); 

    }(); 
} 

}};

+0

감사하지만 작동하지 않을 수 있습니다 내 업데이트를 확인하고 내 생각을 알려주시겠습니까? – Javed

관련 문제