多数の PGF プロット (各プロットには CSV ファイルからの数千のデータ ポイントが含まれています) を含むドキュメントをコンパイルすると、時間がかかりすぎます (数分)。これほど多くのデータ ポイントを持つことは意味がないと認識しています。たとえば、10 分の 1 のデータ ポイントがあれば、同じプロットを紙に再作成するだけで十分でしょう。
たとえば、私のファイルの 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=?
「パス」中に LaTeX が複数回自動的に調整できるようなものです)。
を見てみましょうこの答え。
matlab または octave をお持ちの場合は、matlab2tikz
効率的なダウンサンプリング アルゴリズムを実装した、そこで提供される修正バージョンを使用できます。
一方、matlab も octave も使用しない場合でも、ダウンサンプリング アルゴリズム (関数 pointReduction 内) を必要な言語に翻訳し、それを使用して図をダウンサンプリングし、CSV にエクスポートすることができます。