2013-02-11 3 views
3

У меня возникла проблема с получением моих данных, чтобы показать пропуски при отправке данных по оси X. То, что следует рассматривать как пробел в строке, просто объединяется в одну строку, например, в этом img данные идут с 4 утра до 9 утра из-за выхода из интернета, но в строке нет пропусков. enter image description hereПоказать X-Axis Gaps - Highstocks

Это код для примера, который у меня есть на данный момент.

$.getJSON('mkjson.php?device=<?echo $device_name;?>&sensor=<?echo $sensor_name;?>&pin=<?echo $pin;?>&user=<?echo $_SESSION['user'];?>', function(data) { 
    // Create the chart 
    window.chart = new Highcharts.StockChart({ 
    credits : { 
      enabled : false 
     }, 
     chart : { 
      renderTo : 'container', 
      zoomType: 'x' 
     }, 

     rangeSelector : { 
      selected : 1 
     }, 

     title : { 

      text : 'Device:<?echo $device_name;?>' 
     }, 
     subtitle : { 
      text : 'Sensor:<?echo $sensor_name;?>' 

     }, 

     xAxis: { 
     type: 'datetime', 
     dateTimeLabelFormats: { 
      second: '%m-%d<br/>%l:%M:%S%p', 
      minute: '%m-%d<br/>%l:%M%p', 
      hour: '%m-%d<br/>%l:%M%p', 
      day: '%m-%d', 
      week: '%m-%d', 
      month: '%Y-%m', 
      year: '%Y' 
     } 
    }, 

     yAxis : { 
      min: <?echo $yaxis_min;?>, 
      max: <?echo $yaxis_max;?>, 
      title : {    
       text : '<?echo $unit?>' 
      }, 
      <?if(isset($alert1) ||isset ($alert2)){?> 
      plotLines: [{ 
       color: '#FF0000', 
       width: 1, 
       value: <?echo $alert1;?> 
      }, { 
       color: '#FF0000', 
       width: 1, 
       value: <?echo $alert2;?> 
      }] 
      <?}?> 

     }, 

     rangeSelector : { 
      buttons : [{ 
       type : 'minute', 
       count : 10, 
       text : '10m' 
      }, { 
       type : 'hour', 
       count : 1, 
       text : '1H' 
      }, 
      { 
       type : 'day', 
       count : 1, 
       text : '1D' 
      }, 
      { 
       type : 'day', 
       count : 3, 
       text : '3D' 
      }], 
      selected : 3, 
      inputEnabled : false 
     },   

     series : [{ 
      name : '<?echo $unit;?>', 
      data : data, 
      tooltip: { 
      valueDecimals: 2, 
     formatter: function() { 
      return Highcharts.numberFormat(this.y, 2); 
     }}, 
      dataGrouping: { 
      enabled: true 
      } 
     }] 
    }); 
}); 

Кроме того, это пример из highstocks в jsfiddle, что я пытаюсь использовать, чтобы увидеть, как они были в состоянии выполнить это.

http://jsfiddle.net/gh/get/jquery/1.7.2/highslide-software/highcharts.com/tree/master/samples/stock/demo/data-grouping/

ответ

2

Чтобы добавить пробелы в Highcharts вы должны указать, когда покадровой заканчивается. Для этого вы должны использовать null в качестве точки данных, например:

series: [{ 
    data: [{ 
     x: Date.UTC(2012,1,1,4,0,0,0), 
     y: 24 
    },{ 
     x: Date.UTC(2012,1,1,4,0,0,1), //to create a gap 
     y: null 
    },{ 
     x: Date.UTC(2012,1,1,9,0,0,0), //new data comes 
     y: 24 
    }] 
}] 
+0

Так что это невозможно сделать динамически, потянув данные из sql? – user1707616

+0

Я не уверен, что не так в моем примере, чтобы вытащить из базы данных. Проблема в том, что, как Highcharts должны знать, что должен быть пробел? Если вы знаете, когда должен появиться разрыв, добавьте этот пробел вручную. –

+0

Я думаю, что ОП задает вопрос о том, могут ли Highcharts автоматически обнаруживать пробелы вдоль оси x. Я лично не понимаю, почему нет. Если интервал установлен на один день, например, и не хватает двух дней в серии, почему он не может автоматически заполнить эти дни и установить значение оси y равным нулю или нулю для этих пробелов. Если он не может сделать это автоматически, значит, нам нужно сделать много работы на стороне сервера, чтобы заполнить пробелы. У меня лично возникают проблемы с этой частью. Может ли кто-нибудь дать советы о том, как заполнить пробелы либо на сервере, либо на клиенте? – Aquarelle

0

Если вы переключитесь на графике столбца (или, может быть точечная диаграмма), вы увидите отдельные точки данных лучше, и Highstock выиграл Соедините их с линиями. Paweł заявил, что Highstock не знает, что никаких данных нет - он предназначен для плавного подключения данных временных рядов, которые вы ему предоставляете.

2

plotOptions.series.gapSize - правильный ответ.

Определяет, когда отображать пробел на графике. Размер зазора 5 означает, что , если расстояние между двумя точками больше, чем в пять раз больше, чем двух ближайших точек, график будет нарушен

Для почасовых временных рядов я использую 6. При остановке данных более 6 часов.

plotOptions: { 
    series: { 
    gapSize: 6, 
    . . . 
Смежные вопросы