LoginSignup
0
1

More than 3 years have passed since last update.

TikZ & PGFPlots でカラーマップを作図する.

Posted at

はじめに.

TikZ と PGFPlots を用いて,データファイルを取り込み,下図のようなカラーマップを作成します.main.png
使用するエンジンは Version 1.10.0 (TeX Live 2019) です.XeTeXなどでもできるかもしれません.しかしプロットするデータ数が大きい場合,XeTeXでは作図できない場合があります.

作図するデータの作成.

今回プロットするデータは,C言語を用いて,-1 以上かつ 0.5 以下の範囲の乱数を出力させることで用意しました.使用したコードは以下の通りです.

main.c
#include<stdio.h>
#include<stdlib.h>
int main(){
 FILE *fp;
 srand(0);
 int i,j;
 fp=fopen("out.dat","w");
 for(i=0;i<5;i++){
  for(j=0;j<5;j++)fprintf(fp,"%d\t%d\t%4.3f\n",i,j,(double)rand()/RAND_MAX*2*3/4-1);
  fprintf(fp,"\n");
 }
 fclose(fp);
 return 0;
}

このプログラムによって得られるデータファイルは,次のようなフォーマットです.

0   0   -0.636
0   1   -0.980
0   2   -0.425
0   3   -0.378
0   4   -0.898

1   0   0.490
1   1   -0.274
(中略)
4   3   -0.603
4   4   -0.434

TikZ & PGFPlots で作図.

次のコードファイルを用意します.

main.tex
\documentclass[crop,border=2pt,tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colorbrewer}
\usetikzlibrary{pgfplots.colormaps}
\pgfplotsset{compat=newest,compat/show suggested version=false}

\begin{document}
 \begin{tikzpicture}
 \begin{axis}[
  xmin=-0.5,xmax=4.5,ymin=-0.5,ymax=4.5,
  point meta min=-1, point meta max=1,
  enlargelimits=false,
  axis equal image=true,
  view={-90}{90}, %原点(0,0)を左下に設定したい.
  matrix plot,
  colormap/PiYG-11,
  colorbar,
  ]
 \addplot3[surf]table{out.dat};
 \end{axis}
 \end{tikzpicture}
\end{document}

このファイルをLuaTeXでコンパイルすると,本記事の最上部に挙げた図がPDFで出力されます.

ワンポイントアドバイス.

データを作成する際に,乱数を範囲 -1 以上かつ 0.5 以下で生成しました.PGFPlots のマニュアル(32頁)に,

PGFPLOTS computes the minimum and maximum value of all such numbers. Then, it maps every number into a colormap.

とある通り,PGFPlotsではデータの最大値と最小値を計算し,その間でカラーマップの色を割り当てます.したがってデフォルトの設定で -1 以上かつ0.5 以下のデータをプロットしようとすると,「+1を緑,-1を赤,0を白」に設定することができません.このプロットを可能にする設定が,[point meta min=-1, point meta max=1] なのです.

gnuplot との違い

TikZ & PGFPlots でなくとも,たとえばgnuplotでも作図することができます.私が試したところ,データ数が少ない場合はgnuplotでプロットしても問題ありませんでした.しかし,データ数が多い場合(カラーマップの一辺が100セル以上だと),gnuplotではひとつひとつのセルがくっきりと表せませんでした.解像度を上げる設定をしてプロットしてみても,やはり私の意図通りのプロットにはなりませんでした.ひとつひとつのセルが正方形ではなくぼやっとした円に見えます.
一方でgnuplotならではの良さもあります.データ数が多いカラーマップ(カラーマップの一辺が100セル程度)をプロットする場合は,TikZ & PGFPlots でプロットするために1,2分のコンパイル時間がかかります.gnuplot では3秒程度で作図できるのに.

0
1
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
0
1