LoginSignup
2
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-01

この記事の続き.
プリアンブルや使うデータセットは前回の記事を参照.

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

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

  • 1つ目: 基本的なプロットについて.
  • 2つ目: この記事. 軸の編集について.
  • 3つ目: より細かい装飾について.
  • 4つ目: 応用編. 凝った折れ線グラフを描く.

軸の基本

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

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

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

軸ラベルを入れる

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

\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

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

軸の範囲を指定する

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

\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

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

軸の目盛りを変更する

目盛りの幅を変える

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

\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

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

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

補助目盛りをつける

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

\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

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

アスペクト比を変える

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

\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

"座標 $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 にできる.

\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

注意: unit lengthlabel の組み合わせはなぜか相性が悪い

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

\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

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

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

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

対数スケールを用いる

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

\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

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

\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

他の記事へのリンク

  • 1つ目: 基本的なプロットについて.
  • 2つ目: この記事. 軸の編集について.
  • 3つ目: より細かい装飾について.
  • 4つ目: 応用編. 凝った折れ線グラフを描く.
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0