> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/ja/fen-ye-bie/08-pgfplots-package.md).

# pgfplotsパッケージ

## はじめに

この `pgfplots` ベースとしているパッケージ [`TikZ`](/latex/ja/to/05-tikz-package.md)は、強力な可視化ツールであり、科学・技術系の図を作成するのに最適です。基本的な考え方は、入力データ/式を与えると `pgfplots` が残りを処理してくれる、というものです。

### 文書のプリアンブルは

を使うには `pgfplots` パッケージを文書で使うには、プリアンブルに次の行を追加してください:

`\usepackage{pgfplots}`

また、 `pgfplots` の動作を文書のプリアンブルで設定することもできます。たとえば、各プロットのサイズを変更し、後方互換性を保証するには（推奨）、次の行を追加します:

`\pgfplotsset{width=10cm,compat=1.9}`

これにより各 `pgfplot` 図のサイズが10センチメートルに変更されます。これはかなり大きいので、別の単位（pt、mm、in）も使えます。 *compat* パラメータは、このコードをパッケージのバージョン1.9以降で動作させるためのものです。

### コンパイル時間（簡単な背景）

元のTeXエンジンが考案・作成された40年以上前には、 *直接的な* 図の生成は想定されていませんでした。図は外部プログラム（たとえばMetaPost）で作成されたファイルとして用意され、組版済み文書に取り込まれるものでした。pdfTeXの登場—これは元のTeXソフトウェアを強く基盤にしています—により、図を作成する機能が *直接* pdfTeXの新しい組み込みTeX言語コマンド（ *プリミティブ*と呼ばれます）を使って、図の生成に必要なPDF演算子/データを出力できるようになりました。pdfTeXの登場は、 `TikZ`, `pgfplots` などの高度なLaTeXグラフィックスパッケージの発展につながり、LaTeXの高水準コマンドで記述された図を生成できるようになりました。

しかし、その裏側では、そしてpdfTeXエンジン（および他のエンジン）の内部では、それら高水準のLaTeX描画コマンドは、実際に結果の図を生成するために必要なPDF演算子を（出力して）生み出す低水準のpdfTeXエンジン（プリミティブ）コマンドへと「変換」され、再び処理される必要があります。グラフィック関連のLaTeXコマンドのその処理—プリミティブの展開と実行—には、無視できない時間がかかることがあります。1つの高水準LaTeX描画コマンドであっても、対応するデータとともに、 *多数の* 低水準TeXエンジン（プリミティブ）コマンドの繰り返し実行が必要になることがあります。利用者の視点では、複数の `pgfplots` 図、あるいは非常に複雑な図を含む文書は、描画（コンパイル）にかなり時間がかかることがあります。

### コンパイル時間の短縮

文書コンパイルの速度を上げるには、 `pgfplots` パッケージを設定して図を別々のPDFファイルとして出力し、それを文書に取り込むようにできます。つまり、一度コンパイルし、その後は図を再利用します。そのためには、以下のコードをプリアンブルに追加します:

```
\usepgfplotslibrary{external}
\tikzexternalize
```

参照 [このヘルプ記事](/latex/ja/to-2/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md) を参照して、Overleafプロジェクトでtikzの外部化を設定する方法の詳細を確認してください。

## 基本例（図の外部化も行う）

```latex
\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}

% 図を外部化します
\usepgfplotslibrary{external}
\tikzexternalize

\begin{document}

最初の例は、2Dと3Dの数式を並べて描画するものです。

%ここから2Dプロットを開始
\begin{tikzpicture}
\begin{axis}
\addplot[color=red]{exp(x)};
\end{axis}
\end{tikzpicture}
%ここで2Dプロットを終了
\hskip 5pt
%ここから3Dプロットを開始
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
{exp(-x^2-y^2)*x};
\end{axis}
\end{tikzpicture}
%ここで3Dプロットを終了

\end{document}
```

[この `pgfplots` Overleaf の例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%0A%25+We+will+externalize+the+figures%0A%5Cusepgfplotslibrary%7Bexternal%7D%0A%5Ctikzexternalize%0A%0A%5Cbegin%7Bdocument%7D%0A%0AFirst+example+is+2D+and+3D+math+expressions+plotted+side-by-side.%0A%0A%25Here+begins+the+2D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot%5Bcolor%3Dred%5D%7Bexp%28x%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+2D+plot%0A%5Chskip+5pt%0A%25Here+begins+the+3D+plot%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D%0A%7Bexp%28-x%5E2-y%5E2%29%2Ax%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%25Here+ends+the+3D+plot%0A%0A%5Cend%7Bdocument%7D)

以下の画像は、上のコードによって生成された結果を示しています:

![Plgplotsex1OLV2.png](/files/a6d93ebe2eca634410d4697bc15fe0821446b817)

### コードの説明

なぜなら `pgfplots` は `tikz` に基づいているので、プロットは `tikzpicture` 環境の中になければなりません。次に、環境宣言 `\begin{axis}`, `\end{axis}` によってプロットの正しいスケーリングが設定されます—他の軸環境については [リファレンスガイド](#reference-guide) を確認してください。

実際のプロットを追加するには、コマンド `\addplot[color=red]{log(x)};` を使用します。角括弧の中には `[...]`、いくつかのオプションを渡せます。ここでは、 `色` を `red`に設定しています。角括弧は必須で、オプションを渡さない場合はその間を空白のままにします。波括弧の中には、描画する関数を入れます。このコマンドは必ずセミコロン（;）で終わることを忘れないでください。

最初のプロットの隣に2つ目のプロットを置くには、新しい `tikzpicture` 環境を宣言します。改行は入れず、この場合は小さな空白を入れます。 `\hskip 10pt` これにより10pt幅の空白が挿入されます。

構文の残りは同じですが、 `\addplot3 [surf,]{exp(-x^2-y^2)*x};`を除きます。これで3Dプロットが追加され、 `surf` オプションは角括弧の中で、それがサーフェスプロットであることを宣言します。描画する関数は波括弧の中に置かなければなりません。繰り返しになりますが、コマンドの末尾にセミコロン（;）を付けるのを忘れないでください。

**注**: コードはインデントするのがよい作法として推奨されます—上の例の2つ目のプロットを見てください—また、 `\addplot`に渡す各オプションの末尾にカンマ（,）を付けるとよいです。こうするとコードが読みやすくなり、必要に応じてさらにオプションを追加しやすくなります。

## 2Dプロット

`pgfplots`の2D描画機能は非常に豊富で、要件に合わせてプロットを自由にカスタマイズできます。それでも、通常はデフォルトオプションでとても良い結果が得られるので、必要なのはデータを与えることだけで、残りはLaTeXが処理してくれます。

### 数式を描画する

例を示します:

```latex
\begin{tikzpicture}
\begin{axis}[
    axis lines = left,
    xlabel = \(x\),
    ylabel = {\(f(x)\)},
]
%以下で赤い放物線を定義
\addplot [
    domain=-10:10,
    samples=100,
    color=red,
]
{x^2 - 2*x - 1};
\addlegendentry{\(x^2 - 2x - 1\)}
%ここで青い放物線を定義
\addplot [
    domain=-10:10,
    samples=100,
    color=blue,
    ]
    {x^2 + 2*x + 1};
\addlegendentry{\(x^2 + 2x + 1\)}

\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleaf の例。](https://www.overleaf.com/docs?engine=\&snip_name=pgfplots+example+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.25in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++axis+lines+%3D+left%2C%0A++++xlabel+%3D+%5C%28x%5C%29%2C%0A++++ylabel+%3D+%7B%5C%28f%28x%29%5C%29%7D%2C%0A%5D%0A%25Below+the+red+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dred%2C%0A%5D%0A%7Bx%5E2+-+2%2Ax+-+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+-+2x+-+1%5C%29%7D%0A%25Here+the+blue+parabola+is+defined%0A%5Caddplot+%5B%0A++++domain%3D-10%3A10%2C+%0A++++samples%3D100%2C+%0A++++color%3Dblue%2C%0A++++%5D%0A++++%7Bx%5E2+%2B+2%2Ax+%2B+1%7D%3B%0A%5Caddlegendentry%7B%5C%28x%5E2+%2B+2x+%2B+1%5C%29%7D%0A%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Plgplotsex2.png](/files/bdde62bbf69442aee280bb5cc5cc07f49738f991)

#### コードの説明

新しいコマンドを行ごとに見ていきましょう:

**axis lines = left.**

これにより、既定の枠ではなく、プロットの左側と下側にのみ軸が表示されます。さらに細かいカスタマイズはリファレンスガイドを参照してください。

**xlabel = (x) と ylabel = {(f(x))}.**

説明不要のパラメータ名です。これらによって横軸と縦軸にラベルを付けられます。波括弧の中にあるylabelの値に注意してください。この括弧はpgfplotsにテキストのまとまりをどう扱うかを伝えます。xlabelにも括弧を付けられました。これは、pgfplotsを混乱させる可能性のある複雑なラベルに便利です。

**\addplot.**

これは軸にプロットを追加します。一般的な使い方は導入部で説明しました。この例では2つの新しいパラメータがあります。

**domain=-10:10.**

xの値の範囲を設定します。

**samples=100.**

domainで定義された区間内の点の数を決めます。samplesの値が大きいほどグラフは滑らかになりますが、描画にはより時間がかかります。

**\addlegendentry{(x^2 - 2x - 1)}.**

関数 x^2 - 2x - 1 を識別するための凡例を追加します。

別のグラフをプロットに追加するには、新しい `\addplot` エントリを書くだけです。

### データから描画する

科学研究では、しばしば分析すべきデータが得られます。次の例では、 *pgfplots*:

```latex
データから描画する:

\begin{tikzpicture}
\begin{axis}[
    title={CuSO\(_4\cdot\)5H\(_2\)O溶解度の温度依存性},
    xlabel={温度 [\textcelsius]},
    ylabel={溶解度 [100 g水あたりg]},
    xmin=0, xmax=100,
    ymin=0, ymax=120,
    xtick={0,20,40,60,80,100},
    ytick={0,20,40,60,80,100,120},
    legend pos=north west,
    ymajorgrids=true,
    grid style=dashed,
]

\addplot[
    color=blue,
    mark=square,
    ]
    coordinates {
    (0,23.1)(10,27.5)(20,32)(30,37.8)(40,44.6)(60,61.8)(80,83.8)(100,114)
    };
    \legend{CuSO\(_4\cdot\)5H\(_2\)O}

\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleaf の例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0APlotting+from+data%3A%0A%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3D%7BTemperature+dependence+of+CuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O+solubility%7D%2C%0A++++xlabel%3D%7BTemperature+%5B%5Ctextcelsius%5D%7D%2C%0A++++ylabel%3D%7BSolubility+%5Bg+per+100+g+water%5D%7D%2C%0A++++xmin%3D0%2C+xmax%3D100%2C%0A++++ymin%3D0%2C+ymax%3D120%2C%0A++++xtick%3D%7B0%2C20%2C40%2C60%2C80%2C100%7D%2C%0A++++ytick%3D%7B0%2C20%2C40%2C60%2C80%2C100%2C120%7D%2C%0A++++legend+pos%3Dnorth+west%2C%0A++++ymajorgrids%3Dtrue%2C%0A++++grid+style%3Ddashed%2C%0A%5D%0A%0A%5Caddplot%5B%0A++++color%3Dblue%2C%0A++++mark%3Dsquare%2C%0A++++%5D%0A++++coordinates+%7B%0A++++%280%2C23.1%29%2810%2C27.5%29%2820%2C32%29%2830%2C37.8%29%2840%2C44.6%29%2860%2C61.8%29%2880%2C83.8%29%28100%2C114%29%0A++++%7D%3B%0A++++%5Clegend%7BCuSO%5C%28_4%5Ccdot%5C%295H%5C%28_2%5C%29O%7D%0A++++%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Plgplotsex3.png](/files/0bd6bf1f9c0fb96b2f515eafef51b72e28a3adcd)

#### コードの説明

ここにはいくつか新しいコマンドとパラメータがあります:

**title={CuSO(\_4\cdot)5H(\_2)O溶解度の温度依存性}.**

予想どおり、図にタイトルを付けます。タイトルはプロットの上に表示されます。

**xmin=0, xmax=100, ymin=0, ymax=120.**

x軸とy軸の最小値と最大値の境界です。

**xtick={0,20,40,60,80,100}, ytick={0,20,40,60,80,100,120}.**

マークを配置する位置です。空なら目盛りは自動的に設定されます。

**legend pos=north west.**

凡例ボックスの位置です。その他の विकल्पはリファレンスガイドを確認してください。

**ymajorgrids=true.**

これはy軸の目盛り位置にグリッド線を表示するかどうかを切り替えます。x軸でグリッド線を有効にするにはxmajorgridsを使います。

**grid style=dashed.**

その名のとおりです。破線のグリッド線を表示します。

**mark=square.**

coordinates配列の各点に四角いマークを描きます。各マークは次のマークと直線で結ばれます。

**coordinates {(0,23.1)(10,27.5)(20,32)...}**

描画する点の座標です。これは、図で分析したいデータです。

データがファイルにある場合、ほとんどの場合そうですが; コマンド `\addplot` や `coordinates` の代わりに `\addplot table {file_with_the_data.dat}`を使うべきです。残りのオプションはこの環境でも有効です。

### 散布図

散布図は、何らかのマークを使って情報を表現するために用いられ、統計回帰を計算する際によく使われます。この例では、 `scattered_example.dat`というファイルに含まれるデータを使って散布図を作成します。データは次のようになっています:

```
GPA  ma  ve  co   un
3.45 643 589 3.76 3.52
2.78 558 512 2.87 2.91
2.52 583 503 2.54 2.4
3.67 685 602 3.83 3.47
3.24 592 538 3.29 3.47
2.1 562 486 2.64 2.37
...
```

この散布図では、データの最初の2列を使います:

```latex
\begin{tikzpicture}
\begin{axis}[
    enlargelimits=false,
]
\addplot+[
    only marks,
    scatter,
    mark=halfcircle*,
    mark size=2.9pt]
table[meta=ma]
{scattered_example.dat};
\end{axis}
\end{tikzpicture}
```

![Scattered.png](/files/fa9ba16dc1f3f7a47c4619e3f842f001c6e1a5b7)

[Overleafで散布図プロジェクトの例を開く（データファイルを含む `scattered_example.dat`).](https://www.overleaf.com/project/new/template/20099?id=68399290\&templateName=Scatter+plot+example\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

#### コードの説明

に渡されるパラメータは `axis` や `addplot` 環境でもデータプロットに使えますが、 `scatter`を除きます。以下にコードの説明を示します:

**enlarge limits=false**

これにより軸が縮まり、最大値と最小値の点がプロットの端に来ます。

**only marks**

非常に明示的で、各点にマークを付けます。

**scatter**

scatterが使われると、点は値に応じて色付けされます。その色は下で説明するmetaパラメータによって与えられます。

**mark=halfcircle**\*

各点に使うマークの種類です。利用可能な値の一覧はリファレンスガイドを確認してください。

**mark size=2.9pt**

各マークのサイズです。別の単位も使えます。

**table\[meta=ma]{scattered\_example.dat};**

ここでtableコマンドは、描画するデータがファイルにあることをLaTeXに伝えます。meta=maパラメータは、各点の色を決める列を選ぶために渡されます。波括弧の中にはデータファイル名が入ります。

### 棒グラフ

棒グラフ（bar charts、bar plotsとも呼ばれます）は、収集したデータ、主にある種の集団に関する統計データを表示するために使われます。 `pgfplots` の棒グラフは非常に細かく設定できますが、ここでは単純な例を示します:

```latex
\begin{tikzpicture}
\begin{axis}[
	x tick label style={
		/pgf/number format/1000 sep=},
	ylabel=Year,
	enlargelimits=0.05,
	legend style={at={(0.5,-0.1)},
	anchor=north,legend columns=-1},
	ybar interval=0.7,
]
\addplot
	coordinates {(2012,408184) (2011,408348)
		 (2010,414870) (2009,412156)};
\addplot
	coordinates {(2012,388950) (2011,393007)
		(2010,398449) (2009,395972)};
\legend{Men,Women}
\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleafの棒グラフのコード例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+bar+chart+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Btextcomp%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A%09x+tick+label+style%3D%7B%0A%09%09%2Fpgf%2Fnumber+format%2F1000+sep%3D%7D%2C%0A%09ylabel%3DYear%2C%0A%09enlargelimits%3D0.05%2C%0A%09legend+style%3D%7Bat%3D%7B%280.5%2C-0.1%29%7D%2C%0A%09anchor%3Dnorth%2Clegend+columns%3D-1%7D%2C%0A%09ybar+interval%3D0.7%2C%0A%5D%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C408184%29+%282011%2C408348%29%0A%09%09+%282010%2C414870%29+%282009%2C412156%29%7D%3B%0A%5Caddplot+%0A%09coordinates+%7B%282012%2C388950%29+%282011%2C393007%29+%0A%09%09%282010%2C398449%29+%282009%2C395972%29%7D%3B%0A%5Clegend%7BMen%2CWomen%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Barchartsexample.png](/files/8eb4dcd8394ae4af7485d259a966cfbafd66e905)

#### コードの説明

図は（[前述の](#introduction)）による `tikzpicture` や `axis` 環境の宣言から始まりますが、 `axis` 宣言にはいくつか新しいパラメータがあります:

**x tick label style={/pgf/number format/1000 sep=}**

このコード片は、プロット全体のスタイルを定義します。このスタイルを使うと、このaxis環境内に複数の\addplotコマンドを含めても、追加の調整なしでうまく配置され、見栄えよくなります（これが機能するには、下で説明するybarパラメータが必須です）。

**enlargelimits=0.05.**

棒グラフで範囲を広げることは必要です。こうしたグラフでは、見栄えを良くしたりラベルを追加したりするために、棒の上に余白が必要になることが多いからです。ここで0.05という数値は、プロット全体の高さに対する相対値です。

**legend style={at={(0.5,-0.2)}, anchor=north,legend columns=-1}**

これも大抵の場合は問題なく機能します。必要に応じて-0.2の値を変更して、凡例をx軸に近づけたり遠ざけたりできます。

**ybar interval=0.7,**

この種のプロットでは、各棒の太さを決めます。1なら棒は隙間なく並び、0なら棒は表示されず縦線だけになります。

この `coordinates` この種のプロットでは、棒の基準点と高さを決めます。

y軸のラベルは4桁まで表示されます。扱う数値が9999より大きい場合は `pgfplots` 例と同じ表記が使われます。

## 3Dプロット

`pgfplots` には、描画ソフトに期待されるような3Dプロット機能があります。

### 数式を描画する

これについては [導入](#introduction)に簡単な例があります。では、もう少し複雑なものを扱ってみましょう:

```latex
\begin{tikzpicture}
\begin{axis}[
    title=meshパラメータを使った例,
    hide axis,
    colormap/cool,
]
\addplot3[
    mesh,
    samples=50,
    domain=-8:8,
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\addlegendentry{\(\frac{sin(r)}{r}\)}
\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleafの3D例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+3D+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%5B%0A++++title%3DExample+using+the+mesh+parameter%2C%0A++++hide+axis%2C%0A++++colormap%2Fcool%2C%0A%5D%0A%5Caddplot3%5B%0A++++mesh%2C%0A++++samples%3D50%2C%0A++++domain%3D-8%3A8%2C%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Caddlegendentry%7B%5C%28%5Cfrac%7Bsin%28r%29%7D%7Br%7D%5C%29%7D%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Pgfplots3dexample.png](/files/bba131f230abacd32031761a4030278ce55219dc)

#### コードの説明

ここにあるコマンドのほとんどは既に説明しましたが、3つ新しいものがあります:

**hide axis**

axis環境のこのオプションは名前の通りで、軸は表示されません。

**colormap/cool**

プロットで使う配色です。その他の配色はリファレンスガイドを確認してください。

**mesh**

このオプションも説明通りです。導入例のsurfパラメータも参照してください。

**注**: 三角関数を扱うときは `pgfplots` が既定では度を単位として使います。角度がラジアン（この例のように）で与えられている場合は、 `deg` 関数を使って度に変換する必要があります。

### 等高線プロット

では `pgfplots` 等高線プロットを描くことができますが、データは外部プログラムで事前計算しておく必要があります。例を見てみましょう:

```latex
\begin{tikzpicture}
\begin{axis}
[
    title={等高線プロット、上からの視点},
    view={0}{90}
]
\addplot3[
    contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}
]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleafの等高線プロットの例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+contour+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5B%0A++++title%3D%7BContour+plot%2C+view+from+top%7D%2C%0A++++view%3D%7B0%7D%7B90%7D%0A%5D%0A%5Caddplot3%5B%0A++++contour+gnuplot%3D%7Blevels%3D%7B0.8%2C+0.4%2C+0.2%2C+-0.2%7D%7D%0A%5D%0A%7Bsin%28deg%28sqrt%28x%5E2%2By%5E2%29%29%29%2Fsqrt%28x%5E2%2By%5E2%29%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Contourplotexample.png](/files/f3c5d79dc15179ce140c0080253bf97885522457)

#### コードの説明

これは、前の節で使った同じ方程式の等高線をいくつか描いたものです。 `タイトル` パラメータの値はカンマを含むため波括弧の中にあります。そのため、他のパラメータとの混同を避けるために、グループ化用の括弧を使います。 `\begin{axis}` 宣言があります。新しいコマンドは2つです:

**view={0}{90}**

これはプロットの視点を変更します。このパラメータはaxis環境に渡されるので、他の種類の3Dプロットにも使えます。最初の値はz軸まわりの回転角度（度）で、2つ目の値はx軸まわりの視点回転です。この例では、z軸まわりに0°回転し、x軸まわりに90°回転を組み合わせることで、上から見た視点になります。

**contour gnuplot={levels={0.8, 0.4, 0.2, -0.2}}**

このコード行は2つのことを行います。まず、等高線を計算するために外部ソフトウェアgnuplotを使うようLaTeXに指示します。これはOverleafでは問題なく動作しますが、ローカルのLaTeX環境でこのコマンドを使いたい場合は、先にgnuplotをインストールする必要があります（matlabでも動作し、その場合はコマンド内でgnuplotの代わりにmatlabと書きます）。次に、levelsサブパラメータは、等高線を計算する標高レベルの値のリストです。

### データから表面を描く

3Dサーフェスにデータの集合を描くには、各点の座標さえあれば十分です。これらの座標は、順不同の集合でもよいですし、この場合のように行列でも構いません:

```latex
\begin{tikzpicture}
\begin{axis}
\addplot3[
    surf,
]
coordinates {
(0,0,0) (0,1,0) (0,2,0)

(1,0,0) (1,1,0.6) (1,2,0.7)

(2,0,0) (2,1,0.7) (2,2,1.8)
};
\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleafの3Dサーフェスの例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=plotting+a+surface+from+data+with+pgfplots\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A%5Caddplot3%5B%0A++++surf%2C%0A%5D+%0Acoordinates+%7B%0A%280%2C0%2C0%29+%280%2C1%2C0%29+%280%2C2%2C0%29%0A%0A%281%2C0%2C0%29+%281%2C1%2C0.6%29+%281%2C2%2C0.7%29%0A%0A%282%2C0%2C0%29+%282%2C1%2C0.7%29+%282%2C2%2C1.8%29%0A%7D%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![3dsurfacedata.png](/files/302a9e134b1e2c465fc9f0c41e76a4e0ea2c435f)

#### データの説明

パラメータに渡された点は、3 × 3の行列に含まれているものとして扱われます。各行列の行を区切るには空行を使います。 `coordinates` として扱われます。

この記事の3Dプロットに関するすべてのオプションは、データサーフェスにも適用されます。

### パラメトリックプロット

パラメトリックプロットの構文は少し異なります。例を見てみましょう:

```latex
\begin{tikzpicture}
\begin{axis}
    [
    view={60}{30},
    ]
\addplot3[
    domain=0:5*pi,
    samples = 60,
    samples y=0,
]
({sin(deg(x))},
{cos(deg(x))},
{x});
\end{axis}
\end{tikzpicture}
```

[この `pgfplots` Overleafのパラメトリックプロットの例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=pgfplots+parametric+plot+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bmargin%3D0.5in%5D%7Bgeometry%7D%0A%5Cusepackage%7Bpgfplots%7D%0A%5Cpgfplotsset%7Bwidth%3D10cm%2Ccompat%3D1.9%7D%0A%25%5Cusepgfplotslibrary%7Bexternal%7D%0A%25%5Ctikzexternalize%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cbegin%7Baxis%7D%0A++++%5B%0A++++view%3D%7B60%7D%7B30%7D%2C%0A++++%5D%0A%5Caddplot3%5B%0A++++domain%3D0%3A5%2Api%2C%0A++++samples+%3D+60%2C%0A++++samples+y%3D0%2C%0A%5D%0A%28%7Bsin%28deg%28x%29%29%7D%2C%0A%7Bcos%28deg%28x%29%29%7D%2C%0A%7Bx%7D%29%3B%0A%5Cend%7Baxis%7D%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

このコードの出力は以下の画像に示されています。リンクを開くと、LaTeX文書のプリアンブルが自動的に追加されます:

![Parametricplot.png](/files/fa74708792b874baa4e80d05f7f61f847bc59528)

#### コードの説明

この例で新しいものは2つだけです。まず、 `samples y=0` を使って `pgfplots` 渦巻きの両端がつながらないようにし、次に、描画する関数を `addplot3` 環境に渡す方法です。各パラメータ関数は波括弧の中にまとめられ、3つのパラメータは括弧で区切られます。

## リファレンスガイド

| コマンド/オプション/環境    | 説明                                                 | 取り得る値                                                                                                                                                                                                                                                                                                    |
| ---------------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **axis**         | 線形スケーリングの通常プロット                                    |                                                                                                                                                                                                                                                                                                          |
| **semilogxaxis** | xを対数スケール、yを通常スケール                                  |                                                                                                                                                                                                                                                                                                          |
| **semilogyaxis** | yを対数スケール、xを通常スケール                                  |                                                                                                                                                                                                                                                                                                          |
| **loglogaxis**   | x軸とy軸を対数スケールにする                                    |                                                                                                                                                                                                                                                                                                          |
| **axis lines**   | 軸の描かれ方を変更します。既定値は '*ボックス*                          | box, left, middle, center, right, none                                                                                                                                                                                                                                                                   |
| **legend pos**   | 凡例ボックスの位置                                          | south west, south east, north west, north east, outer north east                                                                                                                                                                                                                                         |
| **mark**         | データプロットで使うマークの種類。1文字を使うと、その文字の見た目は実際のマークに非常によく似ます。 | \*, x , +, \|, o, asterisk, star, 10-pointed star, oplus, oplus\*, otimes, otimes\*, square, square\*, triangle, triangle\*, diamond, halfdiamond\*, halfsquare\*, right\*, left\*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle\*, pentagon, pentagon\*, cubes. (cubesは3Dプロットでのみ動作します). |
| **colormap**     | プロットで使う配色。カスタマイズ可能ですが、あらかじめ定義されたカラーマップもいくつかあります    | hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet.                                                                                                                                                                                                                               |

## さらに読む

詳しくは以下を参照してください：

* [LaTeXで色を使う](/latex/ja/shu-shi-she-ding/13-using-colors-in-latex.md)
* [TikZパッケージ](/latex/ja/to/05-tikz-package.md)
* [pgfplotsとtikzpictureの外部化](/latex/ja/to-2/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md)
* [画像の挿入](/latex/ja/sononotopikku/27-inserting-images.md)
* [表と図の一覧](/latex/ja/to/03-lists-of-tables-and-figures.md)
* [画像と表の配置](/latex/ja/to/02-positioning-images-and-tables.md)
* [LaTeXで直接図を描く](/latex/ja/to/04-picture-environment.md)
* [この **pgfplots** パッケージのドキュメント](http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf).
* [The TikZ and PGF Packages: Manual for version 3.0.0](http://mirror.utexas.edu/ctan/graphics/pgf/base/doc/pgfmanual.pdf)
* [TeXample.net の TikZ と PGF の例](http://www.texample.net/tikz/examples/all/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/ja/fen-ye-bie/08-pgfplots-package.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
