Yamamoto's Laboratory
 
PGPLOT
 
gnuplot
 
 

PGPLOT

PGPLOT は,科学技術計算のプログラムからグラフを描くための古典的なグラフィックライブラリです.このページでは,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 など,インストール時に有効にした出力デバイスへ描画できます.

項目 内容
主な用途 科学技術計算プログラムから,線グラフや散布図などの基本的なグラフを描く.
主な言語 Fortran から直接呼び出せる.C / C++ からは cpgplot を介して呼び出す.
出力先 X Window,PostScript,GIF など.実際に使える出力先は,インストール時に選んだドライバーで決まる.
注意点 新しいソフトウェアではないため,最近のコンパイラや OS では追加の修正が必要になることがある.

インストール

インストール方針

PGPLOT を使うには,PGPLOT 本体,必要な出力デバイスのドライバー,Fortran コンパイラ,C から使う場合は C binding が必要です.現在の UNIX 系 OS では,パッケージとして用意されている場合があります.まずはパッケージの有無を確認し,無い場合にソースからビルドするとよいでしょう.

このページの手順は,古い Linux 環境でソースからインストールしたときのメモです.特に g77 は古い Fortran コンパイラなので,現在の環境では gfortran などに読み替える必要があります.

ソースからのインストール

公式ページの UNIX 版インストール手順に従って,PGPLOT をソースからインストールします.大まかな流れは次のとおりです.

  1. PGPLOT のアーカイブをダウンロードし,作業用のディレクトリに置く.
  2. ソースを展開する.
  3. PGPLOT をビルドするためのターゲットディレクトリを作る.
  4. drivers.list を編集し,使う出力デバイスを選ぶ.
  5. makemake で Makefile を作る.
  6. make でビルドする.
  7. C から使う場合は,make cpg で C binding を作る.
  8. 環境変数 PGPLOT_DIR,PGPLOT_DEV,LD_LIBRARY_PATH を設定する.

以下は,当時使ったコマンドの例です.ディレクトリ名やコンパイラ名は,自分の環境に合わせて変更します.

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 言語から PGPLOT を呼び出す流れ
C 言語から PGPLOT を呼び出す流れ.C binding を介して 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 のように指定します.実際に使える指定は,ビルド時に有効にしたドライバーに依存します.

指定例 意味
/xwindow X Window の画面に表示する.
plot.gif/gif GIF ファイルとして出力する.
plot.ps/ps PostScript ファイルとして出力する.

PGPLOT の終了処理

cpgclos();

注意事項

  • PGPLOT の C binding では,多くの実数引数に float を使います.C の計算では double を使うことが多いので,配列を渡す場合は float 配列を用意します.
  • 値渡しの実数は自動変換される場合がありますが,配列のようにアドレスを渡す引数では型が合っている必要があります.
  • PGPLOT は古いライブラリなので,64 bit 環境や新しいコンパイラでは,配布元の既知の問題や OS のパッケージ側の修正を確認します.
  • 作図結果が出ない場合は,環境変数 PGPLOT_DIR と PGPLOT_DEV,および出力デバイスのドライバーが有効か確認します.

プログラム例

PGPLOT の使い方の例として,定在波をアニメーション表示する C プログラムを作成しました.PGPLOT 付属のデモプログラム pgdemo11.f を参考にしています.

下の図は,サンプルプログラムの出力を GIF にしたものです.Start ボタンを押すと,図が順番に切り替わります.

PGPLOT で描いた定在波
PGPLOT で描いた定在波のアニメーション

ページ作成情報

参考資料

更新履歴

2007年頃 PGPLOT のインストールと C 言語からの利用方法をメモとして作成.
2026年05月30日 文章を校正し,PGPLOT の概要,インストール方針,C binding の説明,呼び出しの流れ,参考資料,更新履歴を追加.図を追加し,見出し階層とインデントを修正.


no counter