Spiski.Graph_Objects.Scattergl

Spiski.Graph_Objects.Scattergl
W zależności od środowiska, renderuje liczby za pomocą przeglądarki internetowej. Przeglądarka internetowa obsługuje funkcje renderowania API SVG i WebGL. SVG Rendering używa renderowania wektorów, podczas gdy WebGL używa interfejsu API Canvas, szybsze renderowanie za pomocą GPU i API WebGL API.

Zazwyczaj nie zauważysz różnicy między figurą SVG i WebGL, chyba że wykreślasz dużą ilość zestawu danych. Wynika to z faktu, że WebGL jest zaprojektowany do obsługi dużych ilości obliczeń za pomocą GPU.

W tym artykule postaramy się pokazać, jak korzystać z klasy ScatterGL z plotly Graph_Objects, aby wykreślić wykres rozproszenia za pomocą WebGL.

Wykreślanie 1 miliona punktów za pomocą Plotly Express

Chociaż plotly Graph_Objects zapewnia wiele dostosowywania i kontroli niskiego poziomu, dobrze jest zrozumieć najszybszą i najbardziej wydajną metodę tworzenia działki renderowanej przez.

Tutaj pojawia się Plotly Express. Korzystając z parametru render_mode, możesz utworzyć wykres rozproszenia i powiedzieć, że użyj WebGL zamiast SVG do renderowania liczby.

Przykładem jest, jak pokazano następująco:

importować fabuły.Wyraź jako PX
importować Numpy jako NP
importować pandy jako PD
n = 100000
df = pd.DataFrame (DICT (
x = np.losowy.Randn (n),
y = np.losowy.Randn (n)
))
Ryc. = PX.rozproszenie (df, x = 'x', y = 'y')
Figa.pokazywać()

Poprzedni kod tworzy wykres rozproszenia wynoszący 10000 punktów za pomocą WebGL Renderer.

Za pomocą Plotly Graph_Objects

Na szczęście, w plotly Graph_Objects, możemy użyć funkcji ScatterGL, która domyślnie korzysta z WEBGL.

Przykładowy kod jest jak pokazano następująco:

importować fabuły.Graph_Objects jak Go
importować Numpy jako NP
n = 100000
Fig = Go.Postać()
Figa.add_trace (
Iść.Rozprasza (
x = np.losowy.Randn (n),
y = np.losowy.Randn (n),
tryb = „markery”
)
)
Figa.pokazywać()

Czas renderowania (SVG vs Webgl)

Jak wspomniano, WebGL oferuje przewagę wydajności w stosunku do SVG. Można to zilustrować podczas wykreślania dużego zestawu danych.

Przykład 1: Za pomocą ScatterGL

importować fabuły.Graph_Objects jak Go
importować Numpy jako NP
n = 10000000
Fig = Go.Postać()
Figa.add_trace (
Iść.Rozprasza (
x = np.losowy.Randn (n),
y = np.losowy.Randn (n),
tryb = „markery”
)
)
Figa.pokazywać()

Poprzedni kod renderuje około 3m 8.3Sec.

Przykład 2: bez WebGL

importować fabuły.Wyraź jako PX
importować Numpy jako NP
importować pandy jako PD
n = 10000000
df = pd.DataFrame (DICT (
x = np.losowy.Randn (n),
y = np.losowy.Randn (n)
))
Ryc. = PX.rozproszenie (df, x = 'x', y = 'y')
Figa.pokazywać()

Ten kod renderuje około 5 minut 12.5 sekund.

Należy pamiętać, że poprzednie wartości pochodzą z jednego czasu, ale nie odzwierciedlają dokładnie przewagi WebGL nad SVG i odwrotnie.

Zalecamy wykonanie testu, który odpowiada Twoim środowisku i potrzebom obliczeń.

Wniosek

W tym artykule zilustrowaliśmy, w jaki sposób możemy stworzyć wykres rozproszenia za pomocą SVG i renderowania WebGL w plotly.