Plotly.Graph_Objects.Scattergl

Plotly.Graph_Objects.Scattergl
Dependendo do seu ambiente, a plotly renderiza seus números usando um navegador da web. Um navegador da web suporta recursos de renderização SVG e WebGL. A renderização do SVG usa a renderização de vetores enquanto o WebGL usa a API de tela, a renderização mais rápida usando a GPU e a API Webgl.

Normalmente, você não notará a diferença entre o SVG e a figura renderizada WebGL, a menos que esteja traçando uma grande quantidade de conjunto de dados. Isso ocorre porque o WebGL foi projetado para lidar com grandes quantidades de computação usando a GPU.

Neste artigo, tentaremos mostrar como usar a classe ScatterGL da plotly graph_objects para plotar um gráfico de dispersão usando Webgl.

Plotando 1 milhão de pontos usando o plotly express

Embora o plotly graph_objects forneça uma grande quantidade de personalização e controle de baixo nível, é bom entender o método mais rápido e eficiente de criar um enredo renderizado WebGL.

É aqui que o plotly expresso entra. Usando o parâmetro render_mode, você pode criar um gráfico de dispersão e dizer plotly para usar o webgl em vez de svg para renderizar uma figura.

Um exemplo é como mostrado no seguinte:

importar plotly.expresso como px
importar numpy como np
importar pandas como PD
n = 100000
df = pd.DataFrame (ditado (
x = np.aleatório.Randn (n),
y = np.aleatório.Randn (n)
))
Fig = px.dispersão (df, x = 'x', y = 'y')
Figo.mostrar()

O código anterior cria um gráfico de dispersão de 10000 pontos usando o renderizador WebGL Enable.

Usando plotly graph_objects

Felizmente, em plotly graph_objects, podemos usar a função ScatterGL que usa o WebGL por padrão.

O código de exemplo é como mostrado no seguinte:

importar plotly.Graph_Objects como Go
importar numpy como np
n = 100000
fig = vá.Figura()
Figo.add_trace (
ir.Scattergl (
x = np.aleatório.Randn (n),
y = np.aleatório.Randn (n),
modo = 'marcadores'
)
)
Figo.mostrar()

Render Time (SVG vs Webgl)

Como mencionado, o WebGL oferece uma vantagem de desempenho sobre o SVG. Isso pode ser ilustrado ao plotar um grande conjunto de dados.

Exemplo 1: Usando Scattergl

importar plotly.Graph_Objects como Go
importar numpy como np
n = 10000000
fig = vá.Figura()
Figo.add_trace (
ir.Scattergl (
x = np.aleatório.Randn (n),
y = np.aleatório.Randn (n),
modo = 'marcadores'
)
)
Figo.mostrar()

O código anterior renderiza cerca de 3m 8.3seg.

Exemplo 2: sem webgl

importar plotly.expresso como px
importar numpy como np
importar pandas como PD
n = 10000000
df = pd.DataFrame (ditado (
x = np.aleatório.Randn (n),
y = np.aleatório.Randn (n)
))
Fig = px.dispersão (df, x = 'x', y = 'y')
Figo.mostrar()

Este código renderiza em cerca de 5min 12.5segs.

Lembre -se de que os valores anteriores são de uma vez, mas não refletem com precisão a vantagem do WebGL sobre SVG e vice -versa.

Recomendamos que você faça seu teste que corresponda às suas necessidades de ambiente e computação.

Conclusão

Neste artigo, ilustramos como podemos criar um gráfico de dispersão usando a renderização SVG e WebGL em plotly.