TikZのdatavisualizationライブラリによる2Dプロットの軸をいじる

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

軸は何も指定しなければ自動で計算してくれるが, 自分でいろいろといじりたいことが多いので, そのことについてまとめておく.
詳細はマニュアルの Data Visualization の章の Axes の節を参照.


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

- [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): 応用編. 凝った折れ線グラフを描く.


# 軸の基本

軸の設定を編集するには, `\datavisualization` コマンドに以下のオプションを追加する.

```latex
\datavisualization[
    ...,
    x axis={...},
    y axis={...},
    all axes={...}
    ]
    data[...];
```

名前の通り, **`x axis` でx軸, `y axis` でy軸, `all axes` で両方の軸**を編集する.


# 軸ラベルを入れる

**`label`** でラベルを指定できる.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={label},
        y axis={label={$y$軸のラベル}}
        ]
        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-000011.png](https://qiita-image-store.s3.amazonaws.com/0/111178/0dcea38e-28c9-3989-13f8-a3ff223f9c6e.png)

単に `label` とだけ指定したら, $x$ または $y$ が出力される.
`label={...}` とすれば, 好きなように指定できる.
デフォルトではy軸のラベルは横向きになるが, 変更することは可能なようだ (マニュアル参照).


# 軸の範囲を指定する

**`min value` で最小値を, `max value` で最大値を指定**できる.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={min value=0.5, max value=6},
        y axis={max value=5}
        ]
        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-000004.png](https://qiita-image-store.s3.amazonaws.com/0/111178/54e857bf-94c5-c696-0e08-f49e268a6b74.png)



最小値と最大値の一方だけを指定した場合, 指定しなかった方はデータから自動で計算される.


# 軸の目盛りを変更する

## 目盛りの幅を変える

**`ticks={step=}`** で目盛りの幅を指定する.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={ticks=few},
        y axis={ticks={step=0.5}}
        ]
        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-000005.png](https://qiita-image-store.s3.amazonaws.com/0/111178/5cb8468d-606a-6ccd-8fb9-3bad9297ff5c.png)

上のy軸のように, **`ticks={step=間隔}`** とすれば, 指定した間隔で目盛りをつける.
自分で指定するのではなく, 大雑把に計算させることもできて, それがx軸の **`ticks=few`** である.
`few` 以外にも指定できる. 

|オプション|目盛り量|
|:--------|:------|
|none     |無し   |
|few      |少ない |
|some     |そこそこ|
|many     |多い    |


## 補助目盛りをつける

**`tikz={minor steps between steps=}`** というオプションで補助目盛りの個数を指定する.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={ticks={minor steps between steps=3}},
        y axis={ticks={minor steps between steps}}
        ]
        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-000006.png](https://qiita-image-store.s3.amazonaws.com/0/111178/46150922-c71f-afda-20de-237db4aa2749.png)


`minor steps between steps=n` と書いたら, **補助目盛りを `n` 個**描く.
(つまり, メインの目盛り間を (n+1) 等分する. 植木算に注意.)
`minor steps between steps` とだけ書いたら, `=9` と同じになる. つまり10等分.


# 描画範囲の大きさを変える

x軸, y軸の長さはデータセットから自動で計算されている? 
これを自分で設定したければ, 各軸のオプションで **`length=長さ`** と指定する.

```
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={length=6cm},
        y axis={length=5cm}
        ]
        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-000023.png](https://qiita-image-store.s3.amazonaws.com/0/111178/cc890ef2-9de5-8569-db61-348fe8f45964.png)


# アスペクト比を変える

何も指定しないとアスペクト比はデータセットから自動で計算される.
アスペクト比を指定するオプションは無いようだが, 代わりに **`unit length=` で "座標 $1$ の長さ" を指定**できる.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={unit length=1cm},
        y axis={unit length=3mm per 0.2 units}
        ]
        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-000007.png](https://qiita-image-store.s3.amazonaws.com/0/111178/0f7dc239-50df-2fa1-a459-8c25ff1fd8eb.png)


"座標 $1$ の長さ" と書いたが, これはx軸なら「2点 $(0,0)$ と $(1,0)$ の間の距離」という意味である.
上の例のy軸で指定されている `unit length=A per B units` とは, **"座標 `B` の長さ" を `A` にする**という意味である.
上の例であれば, 2点 $(0,0)$ と $(0,0.2)$ の間の距離が 3mm になっている.
スケールがとても大きいときやとても小さいときに有用だと思う.


`all axes` の方で `unit length` を指定すれば, アスペクト比を 1:1 にできる.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        all axes={unit length=9mm}
        ]
        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-000008.png](https://qiita-image-store.s3.amazonaws.com/0/111178/ea74b164-59be-a641-6dd9-6a39ee476893.png)


## 注意: `unit length` と `label` の組み合わせはなぜか相性が悪い

`unit length` と `label` を同時に使うと, ラベルの位置が座標 $0.5$ の位置になってしまう.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        all axes={unit length=9mm, label},
        ]
        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/6f4d7029-cdbb-2323-57fb-4873888f248e.png)

軸のデフォルトの設定で `goto pos=.5` というオプションが(実は)入っているのが悪さをしているのだと思う (多分) が, 解決策がわからない...

なお, `unit length` ではなく `length` なら問題ない.

もし `unit length` を指定した上で軸ラベルを書きたい場合は, `info{...}` を使って直接座標を指定するというバッドノウハウでやるしかないと思う.
`info{...}` の使い方は[別の記事](http://qiita.com/t_kemmochi/items/a5a2671e4a893b6ff64b)を参照.


# 対数スケールを用いる

今の例で対数目盛りを用いても意味が無いが, **`logarithmic` で軸ごとに対数スケールに変えることができる**.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        y axis={logarithmic, min value=0.1, max value=10}
        ]
        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-000009.png](https://qiita-image-store.s3.amazonaws.com/0/111178/bb7aaecc-8bdc-bf8e-cd47-2192750bbb7d.png)

両対数にしたければ `all axes` の方で指定すれば良いし, 補助目盛りも自動で対数スケールになる.
ただし, **対数スケールの場合の補助目盛りのキリを良くするには9等分にしないといけない**ことに注意.

```latex
\begin{tikzpicture}
    \datavisualization[
        scientific axes, 
        visualize as line/.list={tri, qua}, 
        tri={style={blue}},
        qua={style={red}},
        x axis={ticks={minor steps between steps=8}},
        all axes={logarithmic, min value=0.1, max value=10}
        ]
        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-000021.png](https://qiita-image-store.s3.amazonaws.com/0/111178/47338ee1-0b8c-7dca-146f-c4ce3cbf7f95.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): 応用編. 凝った折れ線グラフを描く.