1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-01

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

前々回でプロットの簡単な装飾には触れたが, もう少し細かく調整したいこともあるので, そのまとめ.

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

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

文字を記入する

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

\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

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

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

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

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

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

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

\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

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

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

失敗例
\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

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

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

\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

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

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

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

これは細かいことだが, 今のデータセットのように閉曲線になっている場合は, 始点(=終点)の部分がコーナーになっていない.
実際, 座標 $(2.5,3)$ の付近を拡大すると, 次のようになっている.
キャプチャ.PNG

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

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

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

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

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

\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

出力結果を拡大:
キャプチャ2.PNG

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

他の記事へのリンク

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?