2017-09-23 20 views
0

현재 플롯 엔진과 파이썬을 사용하여 분산 형 차트에서 엄청난 양의 X, Y 데이터를 플로팅하는 데 문제가 있습니다. 따라서 브라우저는 실제로 시간이 지나면 충돌하지 않고이 정도의 점수를 렌더링 할 수 없습니다. (Scattergl 옵션도 시도했습니다. https://plot.ly/python/webgl-vs-svg/)분산 형 차트의 데이터 요소 수를 줄이는 방법은 무엇입니까?

분산 형 차트의 원래 모양을 잃지 않고이 엄청난 양의 점을 줄일 수있는 알고리즘이 있습니까? ? 어쩌면 반복적 인 끝점 맞춤 알고리즘과 같은 것이 있을까요?

편집 :

일부 코드

import plotly.plotly as py 
import plotly.graph_objs as go 
from plotly.offline import plot 

import numpy as np 

N = 1000000 
trace = go.Scattergl(
    x = np.random.randn(N), 
    y = np.random.randn(N), 
    mode = 'markers', 
    marker = dict(
     line = dict(
      width = 1, 
      color = '#404040') 
    ) 
) 
data = [trace] 

layout = go.Layout(title='A Simple Plot', width=1000, height=350) 

fig = go.Figure(data=data, layout=layout) 

plot(fig) 
+0

코드를 포함시켜주십시오. –

+0

[Minimal, Complete, Verifiable] (https://stackoverflow.com/help/mcve) 예제를 포함 할 수 있습니까? 나는 "대답"을 가지고 있지만 당신의 코드 없이는 적절한 대답을 쓸 수 없다. –

+0

몇 가지 코드를 추가했습니다. –

답변

0

그냥 데이터 포인트가 존재하는 영역을 시각화하려는 경우, 그것은 밀도의 격자로 X-Y 데이터를 변환하는 것이 더 효과적 일 수 있습니다. 매우 많은 수의 포인트가있을 때 포인트가 서로를 가릴 수 있으므로 어떤 영역에 얼마나 많은 포인트가 있는지 모르기 때문에 이것은 분산 형 플롯보다 좋을 수 있습니다.

나는 pllyly (나는 matplotlib.pyplot을 사용한다)에 익숙하지 않지만 적어도 one way to do this이 있음을 알았다.

0

한 가지 방법은 분산 점에서 임의로 샘플링하는 것입니다. 충분한 포인트를 샘플링하는 한 비슷한 모양을 가질 가능성이 매우 높습니다. 무작위로 당신이 조각 바보 보일 수 있지만 실제로 대신 np.random.randn(N)의 실제 배열을해야합니다, 그래서 것

i_plot = np.random.choice(N, size=10000, replace=False) 
trace = go.Scattergl(
    x = np.random.randn(N)[i_plot], 
    y = np.random.randn(N)[i_plot], 
    mode = 'markers', 
    marker = dict(
     line = dict(
      width = 1, 
      color = '#404040') 
    ) 
) 

를 사용하는 것과 1 백만 포인트 10,000을 맛볼 수 예를 들어

, 그 배열에서 무작위로 샘플링 할 수 있습니다.

다른 수의 점을 테스트하고 엔진이 지연이나 충돌없이 처리 할 수있는 최대 점 수로 늘려야 할 것입니다.