Два `диграфа` с синхронизированным прицелом

Я реализовал два dygraphs с настраиваемой опцией verticalCrosshair : true здесь:

https://rawgit.com/danielkrizian/dygraphs/master/tests/synchronize-Crosshair.html

введите здесь описание изображения

Когда я навожу курсор на любой из графиков в определенной точке x, я хочу, чтобы все графики отображали вертикальное перекрестие в этой точке. До сих пор мне удавалось заставить это работать на верхнем графике (gs[0]) следующим образом:

highlightCallback: function(e, x, pts, row) {
  var sel = gs[0].getSelection();
  gs[1].setSelection(sel);
},

При наведении курсора на нижний график ничего не происходит. Как обобщить его циклом for по всем графикам?


person Daniel Krizian    schedule 16.04.2014    source источник


Ответы (3)


Вы должны поместить объекты dygraphs в массив и зациклиться на нем в вашем highlightCallback, обновив выбор во всех dygraphs, кроме того, который генерирует событие.

Одна сложность заключается в том, что highlightCallback не получает объект dygraph в качестве параметра. Это упущение в API, которое я надеюсь исправить в dygraphs 2.0. Вы можете обойти это, захватив соответствующий объект Dygraph в замыкании, когда вы устанавливаете highlightCallback.

См. демонстрацию синхронизации для вдохновения.

person danvk    schedule 17.04.2014
comment
Спасибо, я заметил параметр row в подписи по умолчанию, см. мой ответ ниже. - person Daniel Krizian; 18.04.2014

Я решил это с помощью:

highlightCallback: function(e, x, pts, row) {
  for (var j = 0; j < gs.length; j++) {
    gs[j].setSelection(row);
  }
},

См. графики и источник по адресу:

https://rawgit.com/danielkrizian/dygraphs/master/tests/synchronize-Crosshair.html

person Daniel Krizian    schedule 17.04.2014
comment
Прохладно! Спасибо за демонстрацию. - person danvk; 18.04.2014
comment
@danvk, обратите внимание, что сегодня я также реализовал опцию legendFollow, благодаря которой легенда плавает и переворачивается следующим образом: rawgit.com/danielkrizian/dygraphs/master/tests/ . Вы заинтересованы в запросе на включение в danvk/dygraphs/master? Могу подкорректировать по вашим отзывам. - person Daniel Krizian; 18.04.2014
comment
классная демонстрация, @danvk, я тоже голосую за включение параметров verticalCrosshair и legendFollow в основную библиотеку. - person Mrinmoy; 20.04.2014
comment
Я был бы рад взглянуть на запрос на вытягивание. Пожалуйста, посетите dygraphs.com/changes.html для руководства. Я бы предложил реализовать это как плагин в каталоге extras. - person danvk; 29.04.2014

У меня были обе эти функции и работали в течение почти года. Я не создавал код, а лишь немного отредактировал его, пытаясь заставить бит labelFollow работать так, как мне нравится. Я последовал за первоначальным автором (авторами) и заполнил код библиотекой, а не простым обратным вызовом в аргументе параметров Dygraph(), но я не помещал фрагменты вертикального перекрестия в плагин, поскольку я не знаю, как это сделать. напишите еще те. Тем не менее, материал labelFollow находится в плагине legend.js, поскольку это то, что сделал первоначальный автор.

Что касается кода для опции verticalCrosshair, я получил его от уважаемого DJCOMXA --- http://www.pixeltradr.com/dygraphs/dygraph.js. Просто наберите «verticalCrosshair», и вы обнаружите, что к этому сценарию были добавлены два крошечных фрагмента.

Чтобы завершить опцию verticalCrosshair, необходимо, конечно, также добавить в dygraph-options-reference.js следующее:

  // Credit due to DJCOMXA.
 "verticalCrosshair": {
    "default": "false",
    "labels": ["Interactive Elements"],
    "type": "boolean",
    "description": "Shows vertical line on highlighted point."
  },

Теперь, что касается другого вопроса labelFollow, для подтверждения предыдущей работы над labelFollow достаточно перейти на группа Google. Затем вы можете щелкнуть ссылку в самом низу этой страницы, чтобы увидеть график, показывающий как вертикальный перекрестие, так и метку «Follow» (последняя, ​​как я полагаю, является работой «wootwoot», которого я более или менее скопировал). Точно так же замените «synchronize-Charts» в этом URL-адресе для этого графика на «customLabel_Crosshair», и вы перейдете к более красивому примеру (я думаю, что я ограничен в количестве ссылок, которые я могу предоставить, поэтому URL-адрес инструкции по реконструкции).

Теперь я не могу понять, как я получил исходный код labelFollow. Как бы то ни было, я нашел несколько модификаций в legend.js (и, конечно же, dygraph-options-reference.js) от wootwoot и отредактировал их.

Должен сказать, что я написал danvdk по адресу gmail, который он указал в верхней части dygraph.js, чтобы предложить полезность этих изменений, но письмо было отклонено, поскольку я не был членом клуба.

Что касается вдохновения из примера синхронизации Dygraphs (ссылка «synchronize demo», предоставленная danvk), черпайте из него вдохновение с осторожностью. Прямо сейчас это дает мне приступы.

Попробуйте следующее: после загрузки страницы перейдите к любому из четырех графиков и посередине в узком разделе увеличьте масштаб (нажмите и перетащите слева направо); затем дважды щелкните.

Что случилось? Вы увеличили масштаб, и трассы заполнили график по вертикали, но для небольшого заполнения --- автоматическое масштабирование. И затем при уменьшении масштаба двойным щелчком все оказалось как прежде. Ааа... но это не так. Теперь перейдите к любому ДРУГОМУ из четырех графиков и повторите первый шаг... увеличьте масштаб в том же узком месте (данные для каждого из этих графиков будут одинаковыми). Обратите внимание, что автоматическое вертикальное масштабирование отсутствует. И это постоянное состояние, пока вы не перезагрузите страницу.

person Mike O'Connor    schedule 06.05.2014
comment
@danvk, я исправил эту проблему с вашей страницей synchronize.html. См. эту страницу stackoverflow.< /а> - person Mike O'Connor; 08.05.2014