|
PGPLOT
gnuplot
|
PGPLOTPGPLOT は,科学技術計算のプログラムからグラフを描くための古典的なグラフィックライブラリです.このページでは,PGPLOT の概要,インストールの考え方,C 言語から呼び出す方法を整理します. 目次はじめに数値計算の途中でグラフを確認したい場合,計算プログラムから直接グラフィックライブラリを呼び出せると便利です.gnuplot を外部プロセスとして起動する方法もありますが,パイプや一時ファイルを扱う必要があります.プログラムの中で作図まで完結させたい場合は,PGPLOT のようなライブラリを使う方法があります. ただし,PGPLOT は新しいライブラリではありません.既存の Fortran や C のプログラムを保守するときには有用ですが,新しく図を作るだけなら,現在は gnuplot,Matplotlib,Plotly などを使う方が環境を整えやすい場合があります.このページは,主に PGPLOT を使う必要がある場合,または過去のプログラムを読む場合のメモとしてまとめます. PGPLOT とはPGPLOT は,T. J. Pearson 氏によって開発された,科学技術計算向けのグラフィックサブルーチンライブラリです.主に Fortran 77 で書かれていますが,C や C++ から呼び出すための C binding ライブラリ cpgplot とヘッダーファイル cpgplot.h が用意されています. PGPLOT の特徴は,プログラムの作図部分と出力先を分けて扱えることです.同じ作図処理から,X Window の画面,GIF,PostScript など,インストール時に有効にした出力デバイスへ描画できます.
インストールインストール方針PGPLOT を使うには,PGPLOT 本体,必要な出力デバイスのドライバー,Fortran コンパイラ,C から使う場合は C binding が必要です.現在の UNIX 系 OS では,パッケージとして用意されている場合があります.まずはパッケージの有無を確認し,無い場合にソースからビルドするとよいでしょう. このページの手順は,古い Linux 環境でソースからインストールしたときのメモです.特に g77 は古い Fortran コンパイラなので,現在の環境では gfortran などに読み替える必要があります. ソースからのインストール公式ページの UNIX 版インストール手順に従って,PGPLOT をソースからインストールします.大まかな流れは次のとおりです.
以下は,当時使ったコマンドの例です.ディレクトリ名やコンパイラ名は,自分の環境に合わせて変更します. PGPLOT をソースからビルドする例 # cd /usr/local/src # gunzip -c pgplot5.2.tar.gz | tar xvof - # mkdir /usr/local/pgplot # cd /usr/local/pgplot # cp /usr/local/src/pgplot/drivers.list . # emacs drivers.list # /usr/local/src/pgplot/makemake /usr/local/src/pgplot linux g77_gcc # make # make cpg # make clean 出力デバイスは drivers.list で選びます.必要な行の先頭にある ! を外すと,そのドライバーが有効になります.ビルド時にエラーが出た場合は,エラーメッセージを見て原因となるドライバーを確認し,必要なければ再び無効にします.参考として,このページで使った drivers.list を置いておきます. 環境変数の設定例 export PGPLOT_DIR=/usr/local/pgplot/ export PGPLOT_DEV=/xwindow export LD_LIBRARY_PATH=/usr/local/pgplot デモプログラムインストール後は,PGPLOT に付属するデモプログラムで動作を確認します.環境変数を設定した後,例えば次のように実行します. デモプログラムの実行例 $ source ~/.bashrc $ /usr/local/pgplot/pgdemo1 デモプログラムは,PGPLOT の関数の使い方を知るためのよい例です.出力デバイスを変えると,同じプログラムから画面表示やファイル出力を切り替えられます. C 言語から使う呼び出しの流れC 言語から PGPLOT を使う場合,プログラムは cpgplot.h を読み込み,cpgplot ライブラリの関数を呼び出します.C binding は,C と Fortran の引数の渡し方の違いを吸収し,内部で PGPLOT 本体を呼び出します.
ヘッダーファイルとコンパイルC 言語のプログラムでは,先頭で cpgplot.h をインクルードします. ヘッダーファイルの読み込み #include "cpgplot.h" コンパイル時には,ヘッダーファイルの場所,ライブラリの場所,リンクするライブラリを指定します.PGPLOT 本体は Fortran で書かれているため,リンクには Fortran コンパイラを使う方が安全です. コンパイルとリンクの例 $ gcc -c -I/usr/local/pgplot sin_wave.c $ g77 -o sin_wave sin_wave.o -L/usr/local/pgplot -lcpgplot -lpgplot -lX11 -lm 毎回このコマンドを入力するのは手間なので,Makefile にしておくと便利です.このページのサンプルプログラム用の Makefile も参照できます. 開始と終了PGPLOT で描画を始めるには,最初に cpgopen() で出力デバイスを開きます.戻り値が正の値なら成功,0 以下なら失敗です.描画が終わったら cpgclos() で閉じます. 出力デバイスを開く例 if((plot1 = cpgopen("/xwindow")) <= 0){
exit(1);
}
出力デバイスは,一般に device/type または file/type の形で指定します.例えば,画面に表示する場合は /xwindow,GIF ファイルに出力する場合は plot.gif/gif のように指定します.実際に使える指定は,ビルド時に有効にしたドライバーに依存します.
PGPLOT の終了処理 cpgclos(); 注意事項
プログラム例PGPLOT の使い方の例として,定在波をアニメーション表示する C プログラムを作成しました.PGPLOT 付属のデモプログラム pgdemo11.f を参考にしています. 下の図は,サンプルプログラムの出力を GIF にしたものです.Start ボタンを押すと,図が順番に切り替わります.
ページ作成情報参考資料
更新履歴
|