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}
出力
解説
\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
.
片対数はsemilogyaxis
かsemilogxaxis
.
\addplot {プロット内容};
で1組のデータをプロット.
\addplot
を並べれば,
1つのグラフに複数のデータをプロットできる.
上の場合特に設定していないので, 適当なサンプル数と定義域で
がプロットされる.
表データをプロット
これ以降はdocument
環境内部のソースのみ示す.
ソース
\begin{tikzpicture} \begin{axis} \addplot table { 0 1 1 2 2 1 3 2 }; \end{axis} \end{tikzpicture}
出力
解説
\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}
出力
解説
\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}
出力
解説
\begin{axis} [設定]
でタイトルなどを設定.
yticklabel style={...}
でy軸目盛のフォーマットを変えている.
中身についてはTikZ/pgfまたはpgfplotstableのドキュメントを参照.
詳しくはpgfplotstableの記事でまとめる予定.
区切りの/
や.cd
の意味については別記事にメモを書く予定.
プロットのスタイル
各プロットのスタイル(点種や色など)は,
cycle list
という用意されたスタイル群から自動的に順番に割り振られる.
例えば
\begin{axis} [cycle list name=black white]
とすればモノクロのリストが適用される.
デフォルトのcolor
の他にexotic
やmark 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
- 軸目盛のフォーマット