gnuplotの時間軸が無理やり日本語を使いに行って文字化けする件
gnuplotの時間軸が、見るからに日本風の日付を書きに行って文字化けしている(Mayと書いてほしいのに、5ぁ□□)。 この場合どうすればよいかいろいろとはまった挙句に解決した。どうすればよいか?
ともかく国際標準の日付を書いてほしい。日本語はいらない。という場合、
set locale "C"
を実行する。
日本語の軸で行きたい。という場合は、文字コードを適切なものに変更する必要がある。 こちらはおそらくset encodingをいじることになる。というのが結論。
gnuplotを愛用しているが、軸が日付や時間を扱う場合の作法にまだ慣れないでいる。 時間軸についてはまだ、awkのmktime関数が返す秒単位の数字がそのまま時間として解釈される場合の主強くについてだけ、なんとなく理解できただけである。
set xdata time set xtics format "%d %b"
と指定をすれば、どうやら5月1日は 1 May と表示されるだろうと期待をして動かしてみたところ、 "1 5ぁ□□" というような感じになってしまった。 どう見ても"1 5月"と書きに行って文字化けしている。 日本人的には "05/01" とかで妥協してしまいたいところであるが、英語論文への利用を検討している以上それは望ましくない。 おそらく、gnuplotが日本語化されているため、どこかの指定に従って日本語で月を表現しに行っているものと思われる。 さらにおそらく、コードの指定が適切でないため、文字化けしているものと思われる。
いろいろ調べたがよくわからない。最終的には、"gnuplot ロケール"で検索してみた。 すると、gnuplot における pngへの出力で日本語が文字化けする。という記述に突き当たった。 以下の記述が素晴らしい。
ちゃんとshift-Jisで漢字がでます。
条件*** 角藤さんバイナリを使う
環境変数GDFONTPATHを C:\WINDOWS\Fonts にセットする。
set encoding locale をつかう。
help set encoding
とすると、show encodingで現在の設定が分かるとのこと。やってみると、
nominal character encoding is default however LC_CTYPE in current locale is ja_JP.UTF-8
と出た。 encodingを英語モードにするのがよさそうだ。
help set encoding で出てくる以下の記述を頼りに、encodingを
iso_8859_1 - the most common Western European encoding used by many Unix workstations and by MS-Windows. This encoding is known in the PostScript world as 'ISO-Latin1'.
iso_8859_1に設定してみることにする。
ところが、やはり図を書きにいくと、"1 5ぁ□□"である。
もう少しhelpを見てみると、"This command does not affect the locale-specific representation of dates or numbers."となっていて、結局localeを変えないといけないのだろうと思われる。
現在のシステムで利用可能なlocaleに設定しなさい (
$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
となっていて、要するにja_JP.UTF-8である。これを反映して、gnuplotも、
set locale "ja_JP.UTF-8"
を採用しているらしい。 ja_JP.UTF-8以外に何が可能なのか、調べる方法は以下のとおり。
$ locale -a
とてもたくさんの選択肢がある。初めに置かれているのが"C"で、これが結局無難か。 そこで、以下の設定に変更してみた。
set locale "C"
すると、見事解決!