모든 줌 레벨에서 실시간으로 큰 데이터 벡터를 정확하게 플로팅하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/508666

문제

큰 데이터 세트 (10Hz 데이터, 24 시간당 864K 포인트)가있어 실시간으로 플롯해야합니다. 아이디어는 사용자가 매우 상세한 산란 플롯을 확대하고 팬화 할 수 있다는 것입니다.

데이터는 그다지 연속적이지 않으며 스파이크가 있습니다. 데이터 세트가 너무 커서 플롯이 새로 고침 될 때마다 모든 점을 플롯 할 수는 없습니다.

그러나 나는 또한 모든 nth 포인트를 그릴 수는 없거나 그렇지 않으면 크고 짧은 스파이크와 같은 주요 기능을 놓칠 것입니다.

Matlab은 제대로합니다. 0으로 가득 찬 864K 벡터를 제공하고 1 점을 1로 설정하면 줌 및 팬으로 실시간으로 올바르게 플롯됩니다.

Matlab은 어떻게합니까?

내 대상 시스템은 Java이므로 Swing/Java2d 에서이 플롯의 뷰를 생성 할 것입니다.

도움이 되었습니까?

해결책

Matlab Central에서 파일을 시도해야합니다.

https://mathworks.com/matlabcentral/fileexchange/15850-dsplot-downsampled-plot

저자로부터 :

이 "플롯"버전을 사용하면 매우 많은 요소가있는 데이터를 시각화 할 수 있습니다. 큰 데이터 세트를 플로팅하면 그래픽이 느리게 만들어 지지만 대부분의 경우 플롯에 표시된 모든 정보가 필요하지 않습니다. 화면에는 픽셀이 너무 많으며 화면에서 캡처되지 않은 정보를 감지 할 수 없습니다.

이 기능은 데이터를 다운 샘플링하고 데이터의 하위 집합 만 플롯하여 메모리 요구 사항을 향상시킵니다. 플롯이 확대되면 더 많은 정보가 표시됩니다. 이상치가 캡처되도록 일부 작업이 수행됩니다.

통사론:

dsplot(x, y)  
dsplot(y)  
dsplot(x, y, numpoints)  

예시:

x =linspace(0, 2*pi, 1000000);  
y1=sin(x)+.02*cos(200*x)+0.001*sin(2000*x)+0.0001*cos(20000*x);  
dsplot(x,y1);

다른 팁

Matlab이 어떻게하는지 모르겠지만 쿼드 트리.

모든 데이터 포인트를 쿼드 트리에 덤프 한 다음 주어진 줌 레벨로 렌더링하려면 픽셀 크기와 비슷한 영역에 도달 할 때까지 쿼드 트리 (보고있는 내용을 겹치는 영역부터 시작)를 걸어갑니다. 해당 지역의 한가운데에 픽셀을 붙입니다.

추가 : OpenGL/Jogl로 도면을 수행하면 더 빠른 도면을 얻을 수 있습니다. 특히 패닝을 예측하고 디스플레이 목록이나 무언가에 표시 할 포인트를 구축 할 수있는 경우 새 프레임에 대한 CPU 작업을 수행 할 필요가 없습니다.

10Hz 데이터는 초당 10 프레임 만 플롯하면됩니다. 많은 게임이 훨씬 더 복잡한 그래픽으로> 100 fps를 달성하기 때문에 쉬워야합니다.

가능한 각 데이터 포인트에 대해 초당 10 픽셀을 플로팅하면 600 픽셀 와이드 위젯을 사용하여 분 분량의 데이터를 표시 할 수 있습니다. 600 번째에 마지막 샘플 인덱스를 저장하면 최신 데이터 만 쉽게 그리기가 쉽습니다.

10 초마다 새로운 데이터 포인트가없는 경우 보간 된 데이터 포인트를 삽입하는 방법을 제시해야합니다. 세 가지 선택이 떠 오릅니다.

  1. 마지막 데이터 포인트를 반복하십시오.
  2. "빈"데이터 포인트를 삽입하십시오. 이것은 그래프에 간격이 발생합니다.
  3. 다음 데이터 포인트가 도착할 때까지 그래프를 업데이트하지 마십시오. 그런 다음 데이터 포인트 사이의 선형 보간으로 한 번에 그리지 않은 모든 픽셀을 삽입하십시오.

애니메이션을 원활하게 사용합니다 이중 소란. 대상 언어가 캔버스 위젯을 지원하는 경우 이중 완성을 지원할 수 있습니다.

확대 / 축소시 위와 동일한 세 가지 선택이 있습니다. 원래 데이터 포인트가 있더라도 확대 된 데이터 포인트가 연속적이지 않기 때문입니다.

이것 Java에서 구현하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top