Wykresy danych w czasie rzeczywistym na wykresie liniowym z html5 [zamknięty]

Chcę zrobić wykres liniowy, który aktualizuje się co kilka sekund i nie wymaga odświeżania strony(pobierze informacje z oddzielnego pliku, który aktualizuje się na serwerze), czy są jakieś biblioteki JavaScript (inne niż JQuery), które ułatwią to? czy ktoś mógłby pokazać przykład na stronie? W skali od 1 do 10 jak trudne to byłoby?(10)

Również dane są aktualizowane w ustalonym przedziale 10s, jeśli to ma znaczenie. I jeśli to możliwe, chciałbym trzymać się tylko CSS3 HTML5 i javascript.

Author: Mehran, 2011-06-28

14 answers

Istnieje kilka bibliotek wykresów, które można wykorzystać: gRaphael, Highcharts i wspomniany przez innych. Biblioteki te są dość łatwe w użyciu i dobrze udokumentowane (powiedzmy 1 w skali trudności).

AFAIK, te libs nie są "w czasie rzeczywistym", ponieważ nie dają możliwości dodawania nowych punktów w locie. Aby dodać nowy punkt, musisz ponownie narysować pełny wykres. Ale myślę, że to nie jest problem, ponieważ przerysowanie wykresu jest szybkie. Zrobiłem kilka prób z gRaphael i ja nie zauważyliśmy żadnego problemu z takim podejściem. Jeśli szybkość aktualizacji wynosi 10s, powinno działać ok (ale może to zależeć od złożoności Wykresów).

Jeśli przerysowanie pełnego wykresu jest problemem, być może będziesz musiał samodzielnie opracować Wykres za pomocą grafiki wektorowej, takiej jakRaphael lub paper.js . Będzie to nieco trudniejsze niż użycie lib Wykresów, ale powinno być wykonalne. (Powiedzmy 5 w skali trudności).

Ponieważ otrzymujesz dane na fixed intervall, można użyć zwykłego Ajax lib. jQuery jest dla mnie ok, ale są inne opcje. To może nie być najlepszy wybór dla nie ustalonych interwałów i w tym przypadku może być konieczne spojrzenie na coś w rodzaju socket.io ale miałoby to również konsekwencje po stronie serwera.

Note1: Raphael, gRaphael i Highcharts nie są czysto HTML5, ale SVG / VML, ale myślę, że jest to również akceptowalny wybór.

Note2: wydaje się, że Highchart nie wymaga przerysowywania wykres podczas wstawiania nowych punktów. Zobacz http://www.highcharts.com/documentation/how-to-use#live-charts

 24
Author: luc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 03:28:29

Proponuję Smoothie Charts .

Jest bardzo prosty w użyciu, łatwy i szeroko konfigurowalny i świetnie sprawdza się w strumieniowaniu danych w czasie rzeczywistym.

Istnieje konstruktor , który pozwala eksplorować opcje i generować kod .

Zastrzeżenie: jestem współpracownikiem biblioteki.

 32
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-24 15:25:56

Kilka rzeczy, które mogą Ci pomóc:

Canvas Express to potężna biblioteka Wykresów: http://canvasxpress.org/

Tutaj znajdziesz samouczek na temat toczenia własnych wykresów opartych na równaniach: http://www.html5canvastutorials.com/labs/html5-canvas-graphing-an-equation/

Korzystanie z rozwiązania canvas jest bardzo proste, można pobrać okresowe dane dla wykresu za pomocą ajax i przerysować Wykres za każdym razem, gdy odzyskujesz nowe dane.
Ponieważ jest po stronie klienta nie będziesz musiał odświeżać strony.

Jeśli znasz się na javascript i Ajaxie, to będzie to średni poziom trudności. Jeśli tego nie zrobisz, prawdopodobnie będziesz musiał napisać więcej pytań na temat Stack Ovreflow, aby pomóc ci z częściami, z którymi utkniesz.

 5
Author: Variant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 07:11:18

Wierzę, że to jest dokładnie to, czego szukasz:

Http://www.highcharts.com/demo/dynamic-update

Open source (chociaż licencja jest wymagana dla komercyjnych stron internetowych), cross device / browser, fast.

 5
Author: Razor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 11:49:04

Flotr2 i Envision są opcjami. Flotr2 ma przykład w czasie rzeczywistym na stronie doco, którą podlinkowałem. Envision jest nieco trudniejsze do rozpoczęcia, więc spróbuj Flotr2.

 4
Author: Fletch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-29 10:45:04

Aby zakończyć ten wątek, proponuję zajrzeć do:

D3.js

Jest to biblioteka, która pomaga z mnóstwem wizualizacji javascript. Jednak krzywa uczenia się jest dość stroma.

Nvd3.js

Biblioteka ułatwiająca tworzenie d3.wizualizacje js (oczywiście z ograniczeniami).

 2
Author: Christopher Chiche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 14:15:35

Możesz również spojrzeć na Wykres CanvasJS , który jest zbudowany na elemencie HTML5 Canvas. Renderuje się bardzo szybko i może być aktualizowany co 50-100 milisekund bez problemów z pamięcią.

[pełne ujawnienie: jestem częścią zespołu]

 2
Author: Sunil Urs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-13 08:08:20

Najprostszym sposobem może być użycie plotti.co - mikroserwis, który stworzyłem właśnie do tego. To zależy od tego, w jaki sposób uzyskasz dane, ale ogólny wzorzec użycia polega na włączeniu obrazu SVG do twojego html, jak

<object data="http://plotti.co/FSktKOvATQ8H/plot.svg" type="image/svg+xml"/>

I podanie danych w żądaniu GET do twojego hasha (lub za pomocą metody (new Image(1,1)).src=... JavaScript z tej samej lub dowolnej innej strony) w następujący sposób:

Http://plotti.co/FSktKOvATQ8H?d=1,2,3

Ustawienie go lokalnie jest również proste

 2
Author: grandrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-16 15:18:39

Oto gist, który odkryłem dla Wykresów czasu rzeczywistego w ChartJS:
https://gist.github.com/arisetyo/5985848

ChartJS wygląda na prosty w obsłudze i ładnie wygląda.

Istnieje również FusionCharts , bardziej wyrafinowana biblioteka do użytku korporacyjnego, z demo czasu rzeczywistego tutaj:
http://www.fusioncharts.com/explore/real-time-charts

EDIT Zacząłem również używać rikszy do wykresów w czasie rzeczywistym i jest łatwy w użyciu i całkiem konfigurowalny: http://code.shutterstock.com/rickshaw/

 1
Author: JustGoscha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-02 22:05:19

Ten wątek jest chyba bardzo stary. Ale chcesz podzielić się tymi wynikami dla kogoś, kto zobaczy ten wątek. Przeprowadziłem porównanie betn. Flotr2, ChartJS, highcharts asynchronicznie. Flotr2 wydaje się być najszybszy. Przetestowano to, przekazując nowy punkt danych co 50ms do 1000 punktów danych całkowicie. Flotr2 był dla mnie najszybszy, choć wygląda na to, że regularnie przerysowuje wykresy.

Http://jsperf.com/async-charts-test/2

 1
Author: ssp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-16 06:45:15

Pobierasz dane z serwera, aktualizujesz wcześniej dostępny zbiór danych, a następnie prawdopodobnie używasz jednej z darmowych bibliotek do rysowania wykresu [np: http://www.rgraph.net/]

Rzeczy, które możesz rozważyć : jeśli twój wykres reprezentuje stan, uzyskaj tylko nowe dane za pomocą xhr, zaktualizuj dane na kliencie i narysuj .

 0
Author: Anil Shanbhag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-28 07:17:12

Http://www.rgraph.net / jest doskonały do wykresów i wykresów.

 0
Author: pushNpop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 20:08:24

Możesz też spróbować Mapy Meteor, jest super szybki (html5 canvas), ma wiele samouczków, a także jest dobrze udokumentowany. Aktualizacje na żywo działają naprawdę dobrze. Po prostu zaktualizuj model i uruchom Wykres.draw (), aby ponownie renderować Wykres sceny. Oto demo:

Http://meteorcharts.com/demo

 0
Author: Eric Rowell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-10 22:30:11

Dodanie od 2015 O ile wiem, nadal nie ma runtime zorientowanych lib wykresu lib. Chodzi mi o Wykres, który zachowania "żądają nowych punktów co N sek", "oczyszczają stare dane" można ustawić "deklaratywny" sposób.

Zamiast tego istnieje graphite api http://graphite-api.readthedocs.org/en/latest / dla strony serwera i liczby wtyczek po stronie klienta, które go używają. Ale w rzeczywistości są one dość ograniczone, brak zaawansowanych funkcji, które lubimy: data scroller, wykresy zasięgu, segmentacja axeX na fazach itp..

Wydaje się, że istnieje zasadnicza różnica między zadaniami "Pokaż mi Wykres zasięgu" i "wykres czasu rzeczywistego".

 0
Author: Roman Pokrovskij,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 09:07:39