각각 CSV 파일의 수천 개의 데이터 포인트를 포함하는 많은 PGF 플롯으로 내 문서를 컴파일하는 데 시간이 너무 오래 걸립니다(분). 나는 이렇게 많은 데이터 포인트를 갖는 것이 의미가 없다는 것을 깨달았습니다. 예를 들어 10분의 1이 있다면 종이에 동일한 플롯을 재현하는 데 충분할 것입니다.
예를 들어 내 파일 중 하나는 다음과 같은 형식의 216,000줄로 구성되어 있습니다.
0.000000000000000000e+00 0.000000000000000000e+00 1.388888888888888888e-04 -2.182787284255027771e-11
물론 이는 너무 많은 양입니다. 그런 다음 파일을 다음과 같이 읽었습니다.
\documentclass{scrartcl}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\begin{document}
\begin{tikzpicture}
\begin{loglogaxis}[
\addplot[mark=*, color=red] file {Data/plotXYZ.dat};
\end{loglogaxis}
\end{tikzpicture}
\end{document}
컴파일 프로세스 속도를 높이기 위해 패키지가 모든 x번째 줄만 사용하는 것이 가능합니까? 아니면 (상당히) 더 빠르게 만드는 다른 방법이 있나요?
저는 Ubuntu를 실행하고 있는데 제 친구가 파일을 awk
통과 .csv
하고 모든 x번째 줄만 유지하는 스크립트를 작성하라고 권했습니다. 하지만 이전에 사용해 본 적이 없기 때문에 어떻게 해야 할지 모르겠습니다 awk
. 이것이 선택 가능한 옵션으로 판명된다면 누군가 그러한 스크립트를 설정하는 데 도움을 줄 수 있습니까?
답변1
pgfplots는 필터를 제공합니다each nth point=100
.
좌표 필터링에는 다양한 사용 사례가 있으므로 다음과 같이 설정하는 것이 좋습니다.
each nth point=100, filter discard warning=false, unbounded coords=discard
이 조합은 폐기된 모든 포인트에 대해 경고를 생성하지 않습니다. 또한 마치 입력 스트림에 전혀 쓰지 않은 것처럼 99포인트를 자동으로 삭제합니다. 대체 선택은 unbounded coords=jump
플롯을 명시적으로 중단한다는 점에 유의하십시오(여기에서는 원하는 것이 아닙니다).
이 접근 방식은 상당히 잘 작동하는 것으로 보고되었습니다. 실제로 일부 외부 도구를 사용하여 데이터 파일을 필터링한 것처럼 시간이 그리 길지 않았습니다(최근 일부 고급 사용자가 메일을 통해 보고한 내용입니다).
답변2
필터 pgfplots
는 each nth point
어느 정도 해결책이 될 수 있지만 일반적으로 사용할 수 있는 것은 아닙니다. 예를 들어, 선택하면 each nth point=100
올바르게 설명하기 위해 실제로 추가 포인트가 필요한 플롯의 일부 영역이 왜곡될 수 있습니다. 반면에 each nth point
더 낮은 숫자로 설정하는 것은 사용되는 포인트 수 측면에서 "경제적"이지 않을 수 있습니다.
즉,더 영리한 다운샘플링 방법이 필요합니다. 이 방법은 각 영역의 플롯의 복잡성에 따라 유지되는 포인트 수를 동적으로 조정할 수 있어야 하므로 필요한 최소한의 포인트 수만 사용하여 최상의 시각적 결과를 얻을 수 있습니다(라텍스와 같이 자동으로 조정할 수 있음). each nth point=?
다이어그램이 "통과"되는 동안 여러 번).
보세요이 답변.
matlab이나 옥타브가 있는 경우 matlab2tikz
효율적인 다운샘플링 알고리즘을 구현하는 수정된 버전을 사용할 수 있습니다.
반면, matlab이나 옥타브를 모두 사용하지 않는 경우에도 해당 다운샘플링 알고리즘(pointReduction 함수에 있음)을 원하는 언어로 변환하고 이를 사용하여 수치를 다운샘플링한 다음 CSV로 내보낼 수 있습니다.