pgfplotsで外部ファイルのデータをプロットする

LaTeX卒業論文を書いた際にpgfplotsというパッケージを利用した.
忘れてしまうので使い方をまとめる.

pgfplotsとは

pgfplotsは, TeXの描画パッケージ:TikZ/pgfを利用してTeXにグラフを描画するパッケージ.
gnuplotを使う場合と違ってTeXソース内部で表の設定ができる.

詳しくは, ターミナルでtexdoc pgfplotsとしてドキュメントを参照のこと.
使い方が網羅されている.

表面的なことしかわかっていないが, 使った部分をまとめる.

使ってみる

ソース

\documentclass[dvipdfmx]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
  \begin{axis}
    \addplot {x^2};
    \addplot {x+10};
  \end{axis}
\end{tikzpicture}
\end{document}

出力

f:id:Asat:20180329091242p:plain:w300

解説

\documentclass[dvipdfmx]{standalone}

dvipdfmxと明示しないとうまく描画されなかった.

\pgfplotsset{compat=1.15}

\pgfplotssetでpgfplotsの全体的な設定をする.
ここではバージョンのみ設定.

\begin{tikzpicture}
  \begin{axis}
    \addplot {x^2};
    \addplot {x+10};
  \end{axis}
\end{tikzpicture}

TikZのtikzpicture環境の中にaxis環境を置く.
これで2軸グラフが1つ作られる.
両対数グラフならaxisのかわりにloglogaxis.
片対数はsemilogyaxissemilogxaxis.

\addplot {プロット内容};

で1組のデータをプロット.
\addplotを並べれば, 1つのグラフに複数のデータをプロットできる.

上の場合特に設定していないので, 適当なサンプル数と定義域で

  • {y={x}^2}
  • {y=x+10}

がプロットされる.

表データをプロット

これ以降はdocument環境内部のソースのみ示す.

ソース

\begin{tikzpicture}
  \begin{axis}
    \addplot table {
      0 1
      1 2
      2 1
      3 2
    };
  \end{axis}
\end{tikzpicture}

出力

f:id:Asat:20180329084821p:plain:w300

解説

\addplotのあとにtableをつけると, {}の中に書いた表のデータをプロットできる.

デフォルトでは, 列区切りは1つ以上のタブまたはスペース, 行区切りは改行.

なにも設定しなければ, 表の1列目がx軸, 2列目がy軸になる.

最後の;忘れに注意.

外部データをプロット

{}の中身を別ファイル(./data.datとか)に保存すれば,

\addplot table {data.dat};

で上と同じ結果になる.

複数のデータを1つのファイルにまとめておいて, この方法でそれぞれプロットすると便利.
つまり,

ソース

data1 data2 data3 data4
0 50 50 60
2 40 45 55
4 30 40 50
6 20 35 45

data.dat

data1 data2  data3  data4
0 50  50  60
2 40  45  55
4 30  40  50
6 20  35  45

document環境内

\begin{tikzpicture}
  \begin{axis}
    \addplot table [x=data1, y=data2] {data.dat};
    \addplot table [x=data1, y=data3] {data.dat};
    \addplot table [x=data1, y=data4] {data.dat};
  \end{axis}
\end{tikzpicture}

出力

f:id:Asat:20180330024659p:plain:w300

解説

\addplot [設定] {...};

で各プロットの設定がいじれる.
設定どうしは,で区切る.

data.datには2列以上のデータがあるので, 各プロットのx軸, y軸に使う列を指定する必要がある.
1行目に列の名前がある場合は, その名前を

[x=data1, y=data2]

のように指定.
列番号で指定するなら,

[x index=0, y index=1]

で同じ結果になる.

外部ファイルから読み込む別の方法

pgfplotstableというパッケージを使う.

プリアンブルで

\usepackage{pgfplotstable}

とした上で

\pgfplotstableread{data.dat}{\mydata}

であらかじめdata.datを読み込んでおけば,

\addplot table [...] {\mydata}

data.datからプロットできる.
\mydataの部分は好きに名前をつければいい.

体裁を整える

ソース

\begin{tikzpicture}
  \begin{axis} [ %以下グラフの設定
      title={サンプル}, %タイトル
      xlabel=$x$, ylabel=$y$, %軸タイトル
      xmin=0, xmax=6, %x軸のminとmax
      xtick distance=2, %x軸刻み幅
      only marks, %線なし
      legend pos=outer north east, %凡例の位置
      yticklabel style={ %y軸目盛のフォーマット
        /pgf/number format/.cd,
        fixed, %固定小数点形式
        zerofill, %ゼロを削らない
        precision=1, %小数点以下1ケタ
      },
    ]
    \addplot+[mark=o] table [x=data1, y=data2,] {data.dat};
    \addplot table [x=data1, y=data3,] {data.dat};
    \addplot table [x=data1, y=data4,] {data.dat};
    \legend{$y_1$, $y_2$, $y_3$};
  \end{axis}
\end{tikzpicture}

出力

f:id:Asat:20180331232544p:plain:w300

解説

\begin{axis} [設定]

でタイトルなどを設定.

yticklabel style={...}

でy軸目盛のフォーマットを変えている.
中身についてはTikZ/pgfまたはpgfplotstableのドキュメントを参照.
詳しくはpgfplotstableの記事でまとめる予定.
区切りの/.cdの意味については別記事にメモを書く予定.

プロットのスタイル

各プロットのスタイル(点種や色など)は, cycle listという用意されたスタイル群から自動的に順番に割り振られる.
例えば

\begin{axis} [cycle list name=black white]

とすればモノクロのリストが適用される.
デフォルトのcolorの他にexoticmark listがある.

点の種類だけ変更して他の設定はcycle listから引き継ぎたい, というような場合は,

\addplot+[mark=o] ...

などとする.
+がないと, 指定していないスタイルはリセットされてしまう.

凡例

\legend{プロット名1,プロット名2,...};

で順番に凡例を指定.
個別に設定したい場合は

\addplot [...] {...};
\addlegendentry{プロット名};

とする.

凡例の場所は

legend pos=...

で設定.
south west|south east|north west|north east|outer north eastの中から指定できる.

外部ファイルにCSVを使う場合

CSV:Comma Separaded Valuesを使う場合は \addplotの設定でcol sep=commaとする.
この場合プロットごとでの設定となる.

グラフ全体で設定するなら, axis環境の設定でtable/col sep=commaとする.

文書全体でなら\pgfplotsset{table/col sep=comma}

参照

  • pgf
    • 値のフォーマット : 92 Number Printing
  • pgfplots
    • スタイル : 4.7 Markers, Linestyles, (Background) Colors and Colormaps
    • 軸タイトル, 凡例など : 4.9 Axis Descriptions
  • pgfplotstable
    • 値のフォーマット : 2.7 Number Formatting Options
  • 軸目盛のフォーマット