2013-02-25 1 views
2

Я использую Highchart для построения нескольких рядов (около 20) на двух yAxes и одном datetime xAxis. Данные динамически загружаются через PHP-скрипт, который предоставляет ответ JSON. Все идет нормально.Несколько рядов с теми же данными xAxis в HighChart

Моя проблема заключается в том, что для обеспечения соответствия Highchart я должен отправлять информацию о времени и времени для каждой серии по сети (Конечно, я мог бы изменять данные JSON в JS после получения информации о времени и времени только один раз, но это также хлопот). 500 точек данных раз 20 серий раз 13 байт для отметки времени = 130 Кбайт трафика для каждого обновления, когда 1/20 из этого будет достаточным.

Мой вопрос: есть ли возможность передать информацию о «рядах» (datetime) в xAxis, а затем присваивать последовательность yAxes по порядку заполнения значению xAxis? То есть Перехожу:

[1361796390000,1361796400000,1361796410000] к Xaxis и [1,2,3] к YAxis

и Highchart присваивает 1 1361796390000, от 2 до 1361796400000 и так далее?

Спасибо за ваши ответы.

ответ

1

Вам не нужно передавать дату и время для каждой точки данных в вашей серии. Вам нужно только пройти начальный DateTime серии, а затем использовать pointStart, чтобы график знать, когда начинать отсчет, например, так:

series: [{ 
    name: 'Wind Speed', 
    data: [0.52, 0.778, 0.746, 0.594, 0.716, 0.793, 0.648, 0.828, 0.202, 0.066, 0.116, 0.116, 0.17, 0.195, 0.051, 0, 0.368, 2.365, 2.841, 2.693, 2.416, 2.541, 2.429, 2.888], 
    pointStart: 1360893600000, 
    pointInterval: 3600000 
}] 

Смотрите в действии: http://jsfiddle.net/Reality_Extractor/pNFYL/

pointStart ожидает Unix time хотя есть много разных способов, как вы могли бы легко подойти к конкретному времени, в котором вы нуждаетесь. Я просто закодировал его в примере для демонстрационных целей.

Когда вы используете pointStart, тогда pointInterval необходимо точно назначить время для данных. Стоит отметить, что это работает только с данными, имеющими регулярные точки. Если у вас есть нерегулярные данные, вам нужно предоставить дату и время для каждого дататота.

Это не совсем ответ на ваш вопрос о передаче времени в виде массива, а затем присвоении его xAxis, но я считаю, что подход pointStart менее сложный, чем назначения массива.

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

+1

Большое вам спасибо за сообщение, которое отвечает на мой вопрос. Проблема в том, что у меня обычно есть регулярные точечные интервалы (каждые 10 секунд). Однако может случиться так, что время от времени набор данных недоступен. Я все равно могу передать эти недостающие значения как значения NULL для HighCharts - вот что я попробую. – user1055421

 Смежные вопросы

  • Нет связанных вопросов^_^