本文へ移動

CSV ファイルのデータをプロットする

ファイルをプロジェクトに追加し、pgfplots の axis の中に \addplot table[x=col1, y=col2, col sep=comma] {file.csv}; と書きます。

ファイルの 2 つの列をプロットする

CSV ファイルをプロジェクトにアップロードします(またはプロジェクト内で作成します)。1 行目で列に名前を付けます。x= と y= で名前によって列を選び、col sep=comma で値がカンマで区切られていることを指定します。

このページでは、小さなファイル data-from-csv-weather.csv を使います。

CSV
month,temp,rain,sd
1,1.2,44,0.8
2,2.0,38,0.7
3,5.6,41,0.9
...
12,2.3,46,0.8

CSV ファイルから読む月ごとの気温

LaTeXプリアンブル: \usepackage{pgfplots}エディタで開く (新しいタブで開きます)
\begin{tikzpicture}
  \begin{axis}[xlabel={Month}, ylabel={Temperature ($^\circ$C)}, xtick={1,...,12}]
    \addplot table[x=month, y=temp, col sep=comma] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}
Scissor LaTeX による組版: CSV ファイルから読む月ごとの気温

フォルダ内のファイルも使えます。{data/weather.csv} のように、プロジェクト内のパスを書きます。

複数の列、誤差の列、計算した値

系列ごとに同じファイルを読み込みます。y error= は列から誤差棒を取り、y expr= は行から値を計算します。列の参照には \thisrow{name} を使います。

1 つのファイルから 2 つの系列

LaTeXプリアンブル: \usepackage{pgfplots}エディタで開く (新しいタブで開きます)
\begin{tikzpicture}
  \begin{axis}[xlabel={Month}, ylabel={Value}, legend pos=north west, ymin=0]
    \addplot+[error bars/.cd, y dir=both, y explicit]
      table[x=month, y=temp, y error=sd, col sep=comma] {data-from-csv-weather.csv};
    \addplot+[mark=none, dashed]
      table[x=month, y expr=\thisrow{rain}/2, col sep=comma] {data-from-csv-weather.csv};
    \legend{Temperature ($^\circ$C), Rain / 2 (mm)}
  \end{axis}
\end{tikzpicture}
Scissor LaTeX による組版: 1 つのファイルから 2 つの系列

表を一度だけ読み込む

\pgfplotstableread はファイルをマクロに読み込み、どの \addplot からでもそれを使えるようにします。同じ表を複数のグラフで使う場合は、こちらのほうが短く書けます。

\pgfplotstableread と 2 つのグラフ

LaTeXプリアンブル: \usepackage{pgfplots}エディタで開く (新しいタブで開きます)
\pgfplotstableread[col sep=comma]{data-from-csv-weather.csv}\weather
\begin{tikzpicture}
  \begin{axis}[ybar, bar width=6pt, ymin=0, xlabel={Month}, ylabel={Rain (mm)},
               xtick={1,...,12}, enlarge x limits=0.06]
    \addplot table[x=month, y=rain] {\weather};
  \end{axis}
\end{tikzpicture}

文書の中のデータ:filecontents

小さなデータセットは .tex ファイル自体に入れておけます。filecontents* はその内容を指定した名前のファイルとして書き出し、それを \addplot table が読み込みます。ファイルは \begin{document} の前のプリアンブルに置きます。

filecontents* で書いたデータ

\documentclass{article}
\usepackage{pgfplots}
\begin{filecontents*}{speed.dat}
t   v
0   0
1   4.4
2   8.1
3   11.0
4   13.2
\end{filecontents*}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xlabel={Time (s)}, ylabel={Speed (m/s)}]
    \addplot table[x=t, y=v] {speed.dat};
  \end{axis}
\end{tikzpicture}
\end{document}

ここでは列が pgfplots のデフォルトであるスペースで区切られているので、col sep は必要ありません。

表のオプション

オプション働きScissor LaTeX での対応
x=name、y=name名前で列を指定使える
x index=0、y index=10 から始まる番号で列を指定使える
col sep=commaspace、tab、semicolon、& も可使える
header=false1 行目は名前ではなくデータ使える
skip first n=2最初の行を無視する使える
x expr=、y expr=\thisrow{name}、\thisrowno{n}、\coordindex で値を計算使える
y error=、x error=誤差棒の列使える
comment chars=!コメント文字を追加(# と % の行は常に読み飛ばされる)使える
\pgfplotstableread表をマクロに読み込む使える
\pgfplotstabletypeset表を LaTeX の表として出力する未対応:メッセージ付きで読み飛ばされる

空のセル、nan、inf は欠損値として扱われ、除外されます。

うまくいかないとき

.csv ファイルを col sep=comma なしで読み込んでも、Scissor LaTeX はカンマを見つけるのでグラフは描かれますが、「問題」タブでオプションを追加するよう促されます。TeX のインストール環境では推測しないので、そちらではグラフが失敗します。

col sep がない場合:描かれるが注意が出る

LaTeXプリアンブル: \usepackage{pgfplots}エディタで開く (新しいタブで開きます)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[x=month, y=temp] {data-from-csv-weather.csv};
  \end{axis}
\end{tikzpicture}

「問題」タブ: Add col sep=comma to read data-from-csv-weather.csv so it also works in LaTeX

プロジェクトにないファイルを指定すると、そのプロットは描かれません。軸は描かれ、「問題」タブに見つからないファイルの名前が表示されます。

見つからないファイル

LaTeXプリアンブル: \usepackage{pgfplots}エディタで開く (新しいタブで開きます)
\begin{tikzpicture}
  \begin{axis}[width=6cm, height=4.5cm]
    \addplot table[col sep=comma] {results.csv};
  \end{axis}
\end{tikzpicture}

「問題」タブ: Data file not in the project: results.csv

TeX のインストール環境との違い

ここにあるのはすべて pgfplots の構文なので、ファイルは TeX のインストール環境でもコンパイルできます。マニュアル:ctan.org/pkg/pgfplots。列から読む誤差棒は誤差棒をご覧ください。

よくある質問

LaTeX で CSV ファイルをプロットするにはどうすればよいですか?

ファイルをプロジェクトに置き、軸の中に \addplot table[x=a, y=b, col sep=comma] {file.csv}; と書きます。a と b には自分の列名を入れます。

CSV がセミコロン区切りです。何と書けばよいですか?

col sep=semicolon を使います。タブ区切りなら col sep=tab です。

列を行番号に対してプロットできますか?

はい。table[x expr=\coordindex, y=name] で、0、1、2 … が x の値になります。

このページの例はすべて、サイトのビルド時に Scissor LaTeX で組版されています。 最終更新:2026-11-07