(Iranyitott) graf, interaktiv GUI library, ami megbirkozik 100.000+ node-dal es feleannyi ellel?

Ugyan kerestem, de nem igazan talaltam megfelelo konyvtarat hozza.

http://visjs.org - Jo lenne, de 3000 node mar megizzasztja
http://sigmajs.org - 5000 kornyeken halalozott el

https://d3js.org - meg nem probaltam, de nem fuzok hozza tul sok remenyt

Volt par celprogram is, amit a Google kidobott, de a GUI-t es a maradekot en szeretnem osszerakni, es csak a graf abrazolast out-sourceolnam.

Ha lehet, akkor fusson browserben, elfogadhato sebesseggel, de az se baj, ha desktop only, macOS Swift, vagy Qt JavaScripttel, esetleg Java / Python. A fizikai szimulacio nem fontos, viszont az aszerint rendezett autolayout jo lenne (tehat peldaul elore generalt node poziciok is boven jok, nem kell real time szamolni).

Az interaktivitas fontos, szoval nem kepet akarok generalni, hanem adatmegjelenitesre szeretnem hasznalni.

--

Legrosszabb esetben megoldas lehet meg fogni valamelyik JS library fizikai engine-jet es headless lefuttatni a szimulaciot, vagy ha van Java, Scala, Kotlin implementacio, akkor a GraalVM is jo valasztas lehet.

Hozzászólások

Ha nagyon nem találsz mást, nézz szét a Gephi környékén... gyakorlatilag egy NetBeans teleszórva a saját cuccaikkal, a gráf vizualizációhoz speciel OpenGL backend-et (JOGL-en keresztül, a natív libek onnan jönnek) használ... ezzel mondjuk desktopra kötöd a szimulációt, de...

Szerk.: és van külön toolkitjük és még példakód is van a headless használatra: https://github.com/gephi/gephi/wiki/Headless-Example

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

ez a post más célból, de összehasonlít pár lehetőséget ilyen nagy gráfokra, talán van benne hasznos információ: https://gephi.wordpress.com/2019/02/02/exploring-the-dystopian-future-o…

egyébként van olyan R csomag ami igraph objectekkel tud ilyet, nem tudom milyen méretnél akad ki

OpenGL-ben hatékonyan megvalósítható amit szeretnél. Az adathalmazt a videokátyának egyszer kell átadni és a video memóriában fog tárolódni. Ezután a CPU munkája csak a nézőpont közlése, minden mást a GPU végez.
Csinálhatod közvetlen WebGL-t programozva, vagy talán értelmesebb a three.js, egy WebGL-re épülő lib:
https://threejs.org/docs/index.html#manual/en/introduction/Drawing-lines
https://threejs.org/examples/#webgl_geometry_hierarchy
Getting Started With Three.js (forgó kocka texturázva, 20perc) https://www.youtube.com/watch?v=8jP4xpga6yY

Másik megoldás a meglévő JS gyorsítása. A lib-ek valószínűleg minden kirajzolásnál a JS adathalmazt újra és újra bejárják. Ráadásként a változásokat lágy átmenettel tudják megjeleníteni, amihez fenn kellhet tartani egy másolatot az adatokról, azt szintén bejárni, összehasonlítani és átmenetet számítani.
- Segíthet, ha találsz egy metódust ami megmondja a lib-nek hogy ezeket hagyja ki, mert nincs változás az adatokban, csak a nézőpont elmozdulása miatt kell frissíteni a nézetet. Valamint nem kívánsz simított átmenetet.
- Az adataid elrendezését átalakítod, csináld minél primitívebbre, "tömbösebbre". Az asm.js ismertetőkben találsz bővebb ajánlást.
- Ha csak 2D kell, és úgyis azt mondod az elrendezést megírod magad, akkor HTML Canvas-al, esetleg WebAssembly+SDL-el is megpróbálhatod a kirajzolást.

Hát márpedig a d3 környékén lesz a megoldás...

Libcola pl? https://ialab.it.monash.edu/webcola/

D3-at láttam már futni többtízezer node-dal és megette, mondjuk a szopás az alatta lévő SVG renderer teljesítményével is lehet.

Most nagyon eretnek leszek, de elvileg a böngésző aminek baromi jó a 2D vektoros rendererje az az edge.

Ha 3D, akkor meg threejs és valami auto layout engine... ez pl egész barátinak tűnik, nem tudom, hány node van a demoban itt a githubon de az ipadnek meg se kottyant, iránynak jó lehet:

https://github.com/vasturiano/3d-force-graph

EDIT: itt van még pár brutálisabb ajánlat: https://scicomp.stackexchange.com/questions/3315/visualizing-very-large…

off, bár lehet azonos lib mint a kérdező is keres:

Mivel oldanátok meg, hogy ki kell rakni 1000 input-ot (névvel), 0-100 közötti értékkel, az értékek időhöz, dátumhoz kötöttek, több évet fognak át, és azt kellene látni, hogy mi éri el mikor a 100-at, vagy a legmagasabb értéket, és akár kikapcsolhatóak legyenek x input-ok? Lehessen csak x-y ideig tartó részre zoom-olni. Nem kell realtime-nak lennie, lehet szerver oldali is, a funkcionalitás a lényeg. Köszönöm.

Sakk-matt,
KaTT :)

Első kipróbálnám, hogy a C3 belehal-e (c3js.org), ha az egész adathalmazt egyben bedobod neki (átalakítod adatsoronként egy-egy JS tömbbe + az időpontokat még egybe aztán copy-paste :) ): https://c3js.org/samples/timeseries.html A különböző adathalmazok elrejtését alapból tudja és csinálja (bár nem tudom, ezer adatsor nevét hogy lehetne értelmesen a user elé tenni...)
A zoom mondjuk alapból nem így megy benne (https://c3js.org/reference.html#zoom-type), de ha más nem, az idő inputokhoz úgyis kell saját input elem, arra ráteszel egy eseménykezelőt, amiben szűrőd az adatokat és újrarajzolod a grafikont.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)