TikZのdatavisualizationライブラリの2Dプロットを装飾する

[この記事](http://qiita.com/t_kemmochi/items/b9e9de21b77958e71eac)と[この記事](http://qiita.com/t_kemmochi/items/4b58995ea14799a48349)の続き.
プリアンブルや使うデータセットは[前々回](http://qiita.com/t_kemmochi/items/b9e9de21b77958e71eac)の記事を参照.

[前々回](http://qiita.com/t_kemmochi/items/b9e9de21b77958e71eac)でプロットの簡単な装飾には触れたが, もう少し細かく調整したいこともあるので, そのまとめ.


他の記事へのリンクも書いておく.

- [1つ目](http://qiita.com/t_kemmochi/items/b9e9de21b77958e71eac): 基本的なプロットについて.
- [2つ目](http://qiita.com/t_kemmochi/items/4b58995ea14799a48349): 軸の編集について.
- [3つ目](http://qiita.com/t_kemmochi/items/a5a2671e4a893b6ff64b): この記事. より細かい装飾について.
- [4つ目](http://qiita.com/t_kemmochi/items/1aeafd5ec3f5f7edc4f2): 応用編. 凝った折れ線グラフを描く.



# 文字を記入する

文字列に限らないが, **`info{...}` を用いるとその中で TikZ のコマンドが使えるようになる**.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}}
        ]
        data[set=tri, headline={x, y}, read from file=triangle.csv]
        data[set=qua, headline={x, y}, read from file=quadrangle.csv]
        info{
            \node[fill=lime] at (visualization cs: x=2, y=3) {テキスト};
            \draw[orange, ->] (visualization cs: x=1.5,y=1) -- (visualization cs: x=5,y=4);
            \node[above] at (visualization cs: x=3,y=4.5) {枠外もOK};
        }
        info'{
            \fill[yellow] (visualization cs: x=4, y=2) circle [radius=2mm];
        };
\end{tikzpicture}
```
出力:
![csv2pdf-2-000012.png](https://qiita-image-store.s3.amazonaws.com/0/111178/daf1e1e8-8a91-4205-0161-ff1ee3590eec.png)

**`(visualization cs: x=x座標, y=y座標)` で, プロット内の座標にアクセスできる** (`cs` = coordinate system).
同じ `tikzpicture` 環境内かつ `\datavisualization` の外で座標を指定しても, 「`tikzpicture` 環境内での座標」になるだけで, プロット内の座標ではなくなるという点に注意が必要.

また, **`info'` を用いると, データセットのプロットより先に描画**する.
上の例で, 「テキスト」と書かれた黄緑色の四角形と, 座標 $(4,2)$ にある黄色い円とで, 青い三角系との上下関係が異なっていることに注意.

なお, `info{...}` の中は普通の `tikzpicture` 環境と同じような状況になるので, **各行ごとにセミコロンを付ける必要がある**.



# 複数のプロットに同じ装飾をする

異なるデータセットに, 同じ装飾を施したい, ということがある.
`tikzpicture` 環境でスタイルシートのようなものを定義できるので, この機能を使えば良い.

例えば2つのデータセットに, 共通して 青線, 破線, 太線, データ点に＋印のマーカー, マーカーは赤色, というスタイル (これに `mystyle` という名前をつけることにする) を施したければ, 以下のようにすれば良い.

```latex
\begin{tikzpicture}[
    mystyle/.style={blue, dashed, thick, mark=+, mark options={red}}
]
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style=mystyle},
        qua={style=mystyle}
        ]
        data[set=tri, headline={x, y}, read from file=triangle.csv]
        data[set=qua, headline={x, y}, read from file=quadrangle.csv];
\end{tikzpicture}
```

出力:
![csv2pdf-2-000022.png](https://qiita-image-store.s3.amazonaws.com/0/111178/38082b2f-f0d1-907c-3d6c-8c45bb689388.png)



## `data point[outlier]` を用いたバッドノウハウ

以下のようにサボってみると, 三角形と四角形がつながってしまって, 失敗する.

```latex:失敗例
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={lines}, 
        lines={style={blue, dashed, thick, mark=+, mark options={red}}}
        ]
        data[set=lines, headline={x, y}, read from file=triangle.csv]
        data[set=lines, headline={x, y}, read from file=quadrangle.csv];
\end{tikzpicture}
```

出力(失敗例):
![csv2pdf-2-000013.png](https://qiita-image-store.s3.amazonaws.com/0/111178/2422385b-ad3b-3dcc-9fd7-4566bc5b655f.png)


これは当然で, **2つのデータセットに同じ名前をつけると, 1つのデータセットとみなされてしまう**からである.

実は, **`data point[outlier]`**というコマンド(?)で**データセットを区切る**ことができるので, これを使ってちょっとズルをすることもできる.


```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={lines}, 
        lines={style={blue, dashed, thick, mark=+, mark options={red}}}
        ]
        data[set=lines, headline={x, y}, read from file=triangle.csv]
        data point[outlier]
        data[set=lines, headline={x, y}, read from file=quadrangle.csv];
\end{tikzpicture}
```
出力:
![csv2pdf-2-000014.png](https://qiita-image-store.s3.amazonaws.com/0/111178/7122e55a-aad0-776f-e7ab-87e5ce22312f.png)

異なるデータセットを同じデータセットだとみなしているという点は変わっていないので, これはバッドノウハウである.

本来は, $1/x$ や $\tan x$ などの関数に対して, 特異点付近でグラフを切って描画するときなどに `data point[outlier]` を用いることが想定されている.

# 閉曲線をプロットするときの始点-終点の処理

これは細かいことだが, 今のデータセットのように閉曲線になっている場合は, 始点(=終点)の部分がコーナーになっていない.
実際, 座標 $(2.5,3)$ の付近を拡大すると, 次のようになっている.
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/111178/128b49c8-03b1-029b-46f7-109abf7f7bf3.png)

この現象は datavisualization とは関係なしに起きる. 例えば

```latex
\tikz \draw (0,0) -- (1,0) -- (1,1) -- (0,0);
```

としても同様の現象が起きる.
`\draw` の場合は, `cycle` というのを入れればちゃんとコーナーになる.

```latex
\tikz \draw (0,0) -- (1,0) -- (1,1) -- cycle;
```

datavisualization の場合で同じようなことをするには, **`straight cycle`** または **`polygon`** というオプションを指定すれば良い.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}, straight cycle},
        qua={style={red}, polygon}
        ]
        data[set=tri, headline={x, y}, read from file=triangle.csv]
        data[set=qua, headline={x, y}, read from file=quadrangle.csv];
\end{tikzpicture}
```

出力:
![csv2pdf-2-000015.png](https://qiita-image-store.s3.amazonaws.com/0/111178/3e6d16fb-ec95-53f7-9e83-cf55c7ee6b97.png)

出力結果を拡大:
![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/111178/0eb7c30a-951b-45fa-d946-7198c3fa386b.png)


ちゃんとコーナーになっている.


# 他の記事へのリンク

- [1つ目](http://qiita.com/t_kemmochi/items/b9e9de21b77958e71eac): 基本的なプロットについて.
- [2つ目](http://qiita.com/t_kemmochi/items/4b58995ea14799a48349): 軸の編集について.
- [3つ目](http://qiita.com/t_kemmochi/items/a5a2671e4a893b6ff64b): この記事. より細かい装飾について.
- [4つ目](http://qiita.com/t_kemmochi/items/1aeafd5ec3f5f7edc4f2): 応用編. 凝った折れ線グラフを描く.