gnuplot の Tips

拡張テキストモードによるフォントの設定

有名なグラフ描画ソフトである gnuplot では,ver.4.2 以降で主な出力形式に拡張テキストモード (enhanced text mode) が指定できるようになっており,LaTeX のようにコマンドを追加して埋め込むことによりフォントの指定などを行います. しかし,マニュアル以外のまとまった情報はあまりないようなので,紹介ページを作ってみました.

拡張テキストモードが指定できる主な出力形式

拡張テキストモードの指定方法

gnuplot の ver.5 以降ではデフォルトで拡張テキストモードになっていますが,ver.4.x では,起動したときは拡張テキストモードになっていませんので,拡張テキストモードにする必要があります.

出力形式を変更すると同時に拡張テキストモードを指定する場合は

      set term terminal enhanced
    

のように set term による出力形式の指定の後に enhanced を指定します. (上記の terminal には上記の出力形式のどれかを指定して下さい.)

出力形式を変更しないで拡張テキストモードを指定する場合は

      set termoption enhanced
    

と指定します. ただし,この termoption はそのときの出力形式に対して状態を記憶するスイッチなので,出力形式を変更する時はその都度拡張テキストモードを指定する必要があります.

拡張テキストモードの使い方

この拡張テキストモードはグラフのタイトルや軸のラベルなど,文字列を指定するほとんどのコマンドで使えます.

基本的なコマンドは以下です.

制御記号 意味
^ a^x 上付き文字
_ a_x 下付き文字
{} a_{12} 範囲の指定
/ {/Symbol ab} フォントの指定 (常に{}で範囲を指定する必要があります)
@ a@^b_c 幅のないボックス
& &{abc} 指定した文字分のスペースを挿入
~ ~a/ 文字の重ね書き
\ '\^' シングルクオーテーションで指定した文字列内の制御文字の無効化 (エスケープ)
\\ "\\^" ダブルクオーテーションで指定した文字列内の制御文字の無効化 (エスケープ)

上記のうち,フォントの指定 / では色々な指定ができます.

意味
{/Symbol p} フォントをギリシャ文字に指定
{/=30 x} フォントを30ptに指定
{/*3 red} フォントを通常の3倍の大きさに指定
{/Times=30 t} フォントを30ptのTimesに指定
{/Helvetica*2 y} フォントを2倍の大きさのHelveticaに指定
{/Symbol \245} "∞"を出力

また,文字の重ね書きでは ~a{.8-} のように2番目の引数に {} を付けその最初に数値を指定することにより,重ね書きする文字を現在のフォントサイズを単位として上に移動させることができます. このため,重ね書きする文字が数字で始まる場合 ~a{1 2} のようにスペースを挿入する必要があり,垂直移動の必要がない場合には ~a{0 2} のように 0 を指定する必要があります.

使用できるフォントの種類に関しては,そのターミナルが使用しているライブラリが持っているフォントに依存します. また,ver.4.x では斜体や太字のフォントの切り替えは,基本的に postscript でしか出来ませんが,ver.5 以降では,/Times:Italic, /Helvetica:Bold, /Times:Bold:Italic のようにフォント名の後に :Bold や :Italic をつけることによって斜体や太字に切り替えられます. 元に戻すときは :Normal を指定します. ただし,Arial や Helvetica のようなフォントでも斜体は :Oblique ではなく,常に :Italic であり,太字の斜体は :Bold:Italic のように両方を指定することになります.

ギリシャ文字ではアルファベットとの対応が分かりにくいものもあります. gnuplot には ps_guide.ps という postscript 形式の一覧表が付属しており,拡張テキストモードを使う際には非常に参考になります. (Windows の場合,最近の gnuplot では pdf 形式に変換された一覧表が gnuplot\docs\psdoc\ps_guide.pdf にあります.) この一覧表を見れば分かりますが,\266 で偏微分の記号,\321 でナブラなど様々な記号を出力することができます. これらの記号は日本語のフォントにも入っていますが,英文ジャーナルの電子投稿などでは日本語フォントが使えませんので,そのような時に特殊な記号を出力したい場合には Symbol を使わなければなりません.

上記の ps_guide.pdf を見れば分かりますが,英文字の Times-Roman とギリシャ文字の Symbol では,052 のアスタリスクや 055 のダッシュ(マイナス),174 のバー(縦棒)のように少しだけ字体が異なるものがあります. これらのフォントはいずれも数式の中では Symbol の方が好ましいので,面倒ですがフォントをその都度切り替える方が良いでしょう. また,Symbol フォントの中には文字の上につける横線用のフォント (140) もあります.

gnuplot から話がそれますが,Unix のドローツールである tgif を使う際にも上記の一覧表は便利に使うことができます. tgif のテキストボックスでは,<ESC> キーを入力すると次の入力は 7-bit が立った状態となり,上記の一覧表で 200 が足された状態になりますので,例えば,シンボルフォントで <ESC> と % と入力すると "∞" を得ることができます.

なお,Symbol フォントが昔からあるギリシャ文字や特殊文字のフォントファイルですが,Time New Roman や Arial にも日本語フォントと同じ場所にギリシャ文字と特殊文字が含まれており,英数字のフォントのまま α や ∞ などを日本語入力でかな漢字変換すれば,ギリシャ文字や特殊文字が出力できて Symbol フォントよりも統一感のある出力となります. そのため,pdfcairo, pngcairo, wxt や qt, svg の出力形式では Symbol フォントを使わずに Times New Roman などを使った方がよいでしょう. ただし,Windows の gnuplot ではデフォルトの文字コードが Shift_JIS なので,Windows で plt ファイルを作る際は文字コードを Shift_JIS にしなければなりません.(メモ帳では文字コードに ANSI を選ぶと Shift_JIS を指定したことになります.)

角度を座標軸に取る場合の Tips

gnuplot では各軸の目盛を指定する際,値とラベルをそれぞれ指定する方法があります. それを使うと,角度を座標軸に取る場合に以下のように範囲と目盛を設定すると見やすいグラフとなります.(例は x 軸の場合)

      set xrange [-pi:pi]
      set xtics ("-p" -pi, "-p/2" -pi/2, "0" 0.0, "p/2" pi/2, "p" pi) font "Symbol"
    

pdfcairo, pngcairo, wxt や qt, svg の出力形式で Symbol フォントを使わない場合は以下のようにします.

      set xrange [-pi:pi]
      set xtics ("-π" -pi, "-π/2" -pi/2, "0" 0.0, "π/2" pi/2, "π" pi)
    

Windows 版 gnuplot における Tips

スクリプトファイル(コマンドファイル)

gnuplot の命令を書いたスクリプトファイルを作るときに拡張子を plt にしておくと,gnuplot のメニューの「ファイルを開く」や「開く」ボタンでスクリプトファイルを選ぶことができます. この「開く」は load コマンドに対応しているので,gnuplot でファイルを開くとそのファイルに書いてある命令を順番に実行します.

コマンドの入力ターミナルが重い場合

現在の gnuplot のデフォルトのターミナルは qt ですが,この場合に特に Windows 11 ではコマンドの入力ターミナルが非常に重くなる場合があります. この場合には,以下のようにターミナルを wxt に変更すると,問題が解決することがあります. ただし,wxt ターミナルのデフォルトの大きさは qt と異なるので,以下のようにサイズを指定します.

      set term wxt size 640, 480
    

なお,環境変数 GNUTERM に wxt size 640, 480 という値を設定すれば,毎回 set term wxt size 640, 480 と入力する必要はなくなります.

Windows へのフォントの別名の登録

上記のように ver.4.x の拡張テキストモードではフォント名に空白があるフォントを用いることができません. そのため,以下の手順でレジストリを編集する事によってフォントの別名を登録することができます.

  1. レジストリエディタを立ち上げて,\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontSubstitutes に移る.
  2. 新規→文字列値(S)で新しい値を追加し,値の名前を Times-Bold とする.
  3. 値のデータとして,Times New Roman Bold を入力する.
  4. 2, 3 と同様にして,名前が Times-BoldItalic,データが Times New Roman Bold Italic の値を追加する.
  5. 4 と同様にして,名前が Times-Italic,データが Times New Roman Italic の値を追加する.
  6. レジストリエディタを終了し,Windows を再起動する.

なお,レジストリの編集は Windows に十分に詳しい方が自己責任で行ってください. 問題が生じても筆者は一切関知しません.

上記の手順の後,レジストリエディタを立ち上げると以下の図のようになります. (追加した部分を青で示しており,上記のついでに Times-Roman も登録しています.)

レジストリにTimes-Bold, Times-BoldItalic, Times-Italic, Times-Romanを登録

このようにフォントの別名を登録しておくと Windows と emf の拡張テキストモードで,postscript のようにTimes-Bold, Times-BoldItalic, Times-Italic を使用することができます. なお,必要があれば同様の手順で Arial-Bold, Arial-BoldItalic, Arial-Italic を登録してもよいでしょう. ただし,以下の注意点があります.

Last update: 2024.4.18

[機械力学研究室ホームページに戻る]   [数値計算に関する情報のページに戻る]