Pico Tech - Gnuplot Memo

Radiation Detection / English Documents ... Francais ... 日本語ページインデックス / Survey Links ... 掲示板 / 放射線量グラフの読み方/ Peak Fit With Gnuplot / Gnuplot Memo3D

Gnuplotで(線量などの)グラフを作るためのメモ

Gnuplotで作ったりFitしたグラフの例:










放射線量グラフの読み方 のページを作ったりしながら、不思議な動きをするモニタリングポストのデータを
色々な形で見たいと思いましたが、原子力規制庁や県、そして、事業者の提供するグラフには制限があったりしてどうにも使い難かったので、
データを全部ダウンロードしてきて自分でグラフ化することにしました。

で、まずは安直にエクセルでやってみました が、どうにも気分が悪いので、Gnuplotでやってみることにしました。

Gnuplotは、フリーソフトの総本山的なGNUのグラフ作成用ソフトで、色々なことが出来ますし、(特に外部のスクリプトと
組み合わせたりすると)エクセルであれこれやるよりも(私にとっては)自由度が高くて、気分がよく作業できました。

Gnuplotは、全く触ったことが無かったので、まずはCygwin(Windowsの機械で、Unix系のソフトが使えるとっても便利な仕組み)
に付いているものを起動して、色々いじってみたり、qt使用のものも試して、まあまあ満足のいく使い方が出来るようになりました。

初期の例、その一: まずは、とにかく、色々表示。左の目盛りが線量率で対数表示。右は気象データでリニア表示。
2年近い長期の表示で、気温の季節による大きな変化が分かりやすいです。線量が「気温だけ」と密接に連動していないのは明らか。

初期の例、その二: 気温や日照時間と高線量地域での線量変動の関係を見るために、表示範囲を調整。

現在使用している表示の例: 風向データも追加して、凡例を外に追い出してみました。夫沢三(ここでは黒)だけを出しています。
やっぱり、夫沢三MPの場合は、「日照」が一番影響しているものと思われます。(特に夏のパターンでは)


インストール

お勧めは、これ。(Zipファイルを開いて)インストーラーを実行すると、適当に入れてくれますので、それを起動するだけ。(日本語で出来ます)
 http://sourceforge.net/projects/gnuplot/files/gnuplot/5.0.rc2/gp50rc2-win32-mingw.exe/download

他にも、色々なバージョンがあって、Cygwinを使っている場合は、それに付属のものを使えば良いかと思われますが、
私の環境(Win7 64ビット)では、日本語の文字化けが解決出来ていません。(なので、安直にQt利用のMingW版で回避)
また、(CygwinXではなく、テキストベースのBashを使っている場合は)CygwinのX11の設定をBashの設定ファイルに付け加えておかないと、
グラフの表示が出ないかも。 ==> export DISPLAY=:0.0

他のバージョンやGnuplotの本家:

http://www.tatsuromatsuoka.com/gnuplot/Eng/winbin/ 最新のバージョン

http://sourceforge.net/projects/gnuplot/files/gnuplot/ 安定版など

http://www.gnuplot.info/download.html 本家のダウンロードページ

http://www.gnuplot.info/ 本家のトップページ


最初のテスト

Gnuplotは、グラフの作成のコマンドをまとめたファイルを作って、それを指定して実行するやり方と、
「対話的」に、色々試せるやり方の両方が出来ます。

上でお勧めのMingW版をインストールして起動すると、この「対話モード」になります。

そこで、
plot sin(x)
と(半角英数で)タイプすると、小窓が開いて、グラフが表示されたら、テスト完了。

で、このグラフの上で、キーやマウスボタン、マウスホイールで、ズームや座標の移動が出来ます。
まず、h のキーを叩くと、操作のリストが出てきます。
分かり難い場合、以下のページを御覧になると良いでしょう。

http://d.hatena.ne.jp/syonbori_tech/20111208/1323355579

マウスホイールを上下すると、グラフが上下します。
Shiftキーを押しながら上下すると、グラフが左右に動きます。
Ctrlキーを押しながら上下すると、ズームします。
ただし、複雑で、描画に時間のかかるグラフでこれをやると、非常に時間がかかったり、
分けがわからないことになるので、多少注意が必要です。

複雑で、重いグラフを表示している際には、mのキーで、マウス操作を切っておいた方が無難です。

また、マウスホイールによる操作は、記憶されていて、pのキーで撒き戻し、
nのキーで撒き戻した地点から再度実行することが出来て、 「軽いグラフならば」
アニメーションの様に動かせて面白いです。


実際にやってみる

まず、Gnuplotをインストールしたら、以下の、私が下準備した気象データや
線量データをパッケージにしたZipをダウンロードして解凍し、
Gnuplotの中でパッケージに含まれている cmd.plt を開くか、
load 'cmd.plt' などとやると、ちょっと時間がかかりますがグラフが出てきます。

(もし、違うバージョンのGnuplotを利用している場合には、コマンドファイル「cmd.plt」の中の「set term qt 1 size 820,320」の行の先頭に半角の#をつけて、コメントアウトする必要があるかもしれません。)

表示結果:

線量率のデータに、感雨や降水量だけでなく、気温、風向風速、(データに含まれていれば)日照も含めた上、
任意の期間を表示出来ますし、表示の仕方も幾らでも見やすいように調整出来るので、大変満足していますし、
現状では、簡単にこの様なグラフが見られる仕組みは、これだけです。

また、幾らでも、拡張、変更が可能ですし、データのダウンロードの自動化スクリプトもぼちぼち書いていますし
これで、不思議な線量率の変化があった場合でも、調査するのが楽になります。

ただし、データの量が多い為、マシンによっては、表示に時間がかかるかと思います。

表示の速度を上げたい場合は、気象データのファイルのバックアップをとって、要らない期間を削除したり、
線量データのファイルの要らない期間やフィールドを削除したり、
表示する項目を減らせば良いでしょう。

後は、規制委員会のサイトから、ご自分が調べたいモニタリングポストのデータをダウンロードして、
コマンドファイルの中の 'Naraha-kamishigeoka.csv' などの部分を編集して、
自分がダウンロードしたファイル名(名前を変更しないとdb.csv, db(2).csv,など)に変え、
凡例用の'上繁岡'などを変更し、好みの期間(sdate で開始日時、period で表示日数)を指定したり、
set yrange で縦軸のズームを変えたりすれば色々と見えてきます。


マニュアルとか読みたい人は

自分で、色々なグラフを表示したい場合や、私がやってみた例を理解したり改造したい場合は、マニュアルを読む必要が出てくるかも。

ただ、検索してstackoverflowとか読むと、おおよそのことは分かったりします。

それでも、期待した動きをしない場合などに、それが自分が何か間違った使い方をしているせいなのか、環境やソフトの問題なのか、とか、
そういうことは、マニュアルを読んだりしないと分からなかったりしますし、プログラムのソースコードを読んで漸く分かる場合もあったりします。

日本語のマニュアル:

http://dsl4.eee.u-ryukyu.ac.jp/DOCS/gnuplot/node4.html

最新版(5.0-rc1)のマニュアル(英語):

http://www.tatsuromatsuoka.com/gnuplot/Eng/cygbin/gnuplot.pdf

詳しい話

http://takeno.iee.niit.ac.jp/~shige/unix/gnuplot/gnuplot.html

入門用サイト

http://graph.pc-physics.com/

http://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/gnuplot/gnuplot.html

http://www.gnuplot-cmd.com/

応用例

http://www.stex.phys.tohoku.ac.jp/comp_text/node67.html

http://www17.ocn.ne.jp/~lite/gnuplot_rb.html

http://stellarlife.blog108.fc2.com/blog-entry-182.html

詳しい人が居る掲示板

http://ayapin-film.sakura.ne.jp/Gnuplot/trees.cgi?log=


利用したデータ

モニタリングポストのデータは、規制委員会の10分値のデータを無変更で使っています。

http://radioactivity.nsr.go.jp/map/ja/download.html

上記のページは(小分けにしてダウンロードしないとならなくて)使い勝手が悪いので、自動的にダウンロードするスクリプトを書いているところです。
 
   

気象データは、気象庁のアメダスなどの10分値のデータを使っています。

http://www.data.jma.go.jp/obd/stats/etrn/

これは、どうやらスクリプトなどでダウンロードしないで欲しい、ということなので、サーバーに負荷がかからないよう、
ゆっくりとダウンロードしてHTMLデータをcsv形式(日時のフォーマットが、原子力規制庁のデータと同じになっているもの)に
変換するPythonのスクリプトを書いて利用しました。

また、風向のデータは漢字で入っているので、これを数値化してあります。静穏が0、北が1、北北西が2、北西が3、という感じです。
最初は、単にアルファベットに変換していましたが、Gnuplotの側で数値化すると時間がかかるかもしれないので、csvを見た時の
人間の可読性は減少しますが、csvを変換してしまうことにしました。

2011年の初めから、現在までのデータをダウンロードするのは、結構時間がかかります。
一度ダウンロードしたら、後は、時々最新のデータを追加する仕組みです。

現在、福島県の広野と、東京都の羽田のデータがあります。2014年7月現在で、それぞれ8メガバイトくらいの大きさです。
 パッケージに含まれています

福島県の広野 http://pico.dreamhosters.com/img/Misc2/Hirono_36_1034.csv

東京都の羽田 http://pico.dreamhosters.com/img/Misc2/Haneda_44_0371.csv


Gnuplotのコマンドファイル

日本語を表示しない場合は、UTF−8でもShif−JISでもなんでも良いのですが、グラフに日本語を出したい場合、
Windowsで(お勧めした)MingWバージョンを利用する際には、コマンドファイルはシフトJISで保存する必要があるようです。

で、初めは、日本語表示にはこだわらず、まず、グラフを出すことを考えると良いでしょう。

以下は、私が現在使っているコマンドファイルの例です。これをメモ帳などにコピペして適当な短い名前で保存し、
Gnuplotの中で、「load 'cmd.plt'」とタイプするか、メニューやツールバーのボタンからFile Openで開くと
実行されて、グラフが出てきます。

マクロとか、使う必要の無いことをやったりしてますが、そのうち直します。

また、私がお勧めしたMingWのインストーラー付きバージョンを入れると、「.plt」の拡張子のファイルが
Gnuplotに関連付けられるので、エクスプローラーでダブルクリックしたり、エンターキーを押しても
コマンドファイルが実行されてグラフが出てきますし、PythonなどのスクリプトのShellopenでも
コマンドファイル名を与えるだけで、実行されるようになって便利です。

で、現在は、「横軸で、表示する期間の指定(xrange で行う)」と、「縦軸の表示範囲の指定(yrange で行う)」を、
「手動で書き換えて」再度実行しています。

面倒な様でも、こういうやり方が一番自由度が高いので、最初はこんな風に使って、自分なりのパターンが決まったら、

自動化用の簡単なGUIとかも作ろうかと思っています。
 * 更新:現在私が使っているコマンドファイルは、前半のライブラリー部分と、後半のプロットを一定の期間について連続して行う部分に分け、各地点の設定だけをまとめた短いコマンドファイルから、これらをロードしてプロットするようになっています。その前半と後半、そして観測地点の一例を以下にリンクしておきます。これらは、少し複雑なこともしているし、実験しながら発展したので、整理されてない部分もあります。 

http://pico.dreamhosters.com/raddata/plot-lib.plt  

http://pico.dreamhosters.com/raddata/plot-loop.plt

http://pico.dreamhosters.com/raddata/07546_1070000010-p_2014-07-01_32.plt

ここからが(以前利用していた)コマンドファイルです。 これもパーッケージに含まれています http://pico.dreamhosters.com/img/Misc2/cmd.plt
「***」が付いているのが、一番頻繁に変更する項目です。(sdate,period,yrange)


 
#!/usr/bin/gnuplot -persist
# 半角のシャープ #で始まるのはコメント行で、無視されます。 # 半角のバックスラッシュ ¥ (日本語表示だと円記号になったりします)が行の最後にあると、 # 次の区切りがないものとみなされます。 # これらは、幾つかのスクリプト言語と一緒です。(Python,Perl,Bash,...)
# 前回の設定が残ってないように、全部リセット reset
# qt利用の指定と、画面のサイズ。Gnuplotでは、Qtの他にも、画像ファイルに直接出したり、色々出来る。 set term qt 1 size 820,320
# マクロの使用を許可 set macro
# データを読み込む際の日時のフォーマットを指定。 set timefmt x "%Y/%m/%d %H:%M"
# 横軸が日時であることを指定 set xdata time
# 横軸の日時の表示フォーマットの指定。 お好みに合わせて変更可能 set format x "%y/%m/%d\n%H:%M"
# グリッドを表示 set grid
# csvなので、データの区切りはカンマを指定 set datafile separator ","
# 基本的には線グラフを使うことを指定 set style data lines
# 縦と横の表示データの範囲を一応リセット。多分必要ないですが念のため set xrange [*:*] set yrange [*:*]
# 感雨データの「有」または「無」の漢字コードの二バイト目(x[2:2])が半角のLなら表示する関数 # [start:end]の形式は、Pythonでも使われますが、Gnuplotでは、最初が1なので要注意。 rain(x,y)= (x[2:2] eq "L"? y : NaN)
# 感雨データの表示の指定。箱型グラフで、薄めの色で出しています。 set style fill solid 0.5
# CygwinのX11では、noborder を入れた方が良かったです。 # set style fill solid 0.5 noborder
# 何も表示しない、ダミー関数 dummy(x) = NaN
# 縦横の対数表示を(念のため)リセット unset log
# 右と左のマージンを設定。わざわざ変数を使ってますが、そういう「必要」はありません。 mm = 4 set lmargin (mm+2) set rmargin (mm+20)
# 線の説明をグラフの外側、下の方に追い出し、説明を左にして、文字を左に寄せ、文字と線の間を少し詰めている。 set key right bottom outside nobox reverse Left width -3
# 縦軸の目盛りは、左右別々なので、両側に出す指定(mirror)を否定。 set ytics nomirror
# 右側には、赤で温度、風速、風向、降水量などの為の目盛りを出す。 set y2tics textcolor rgb "red" nomirror
# 風向用の東西南北を出すために、目盛りを一々指定。普通は自動で、お任せしておけば良い。 set y2tics (40,30,20,10,0,'N' -2, 'E' -4, 'S' -6, 'W' -8, -10)
# 温度などの目盛り(とデータ)の表示範囲を指定。 set y2range [-12:32]
# 目盛りの説明を出すことも出来ますが、「自分用」だったり、画面を節約したい時などは、別に無くても良いでしょう。 #set y2label "Temp" #set ylabel "Dose rate"
# *** 表示開始日を指定。(必要なら、時間も指定できます。) ***  sdate = "2012/03/11"
# 再度指定すると最後のものが有効。幾つかの指定を書いておいて、#を付けてコメント化すると切り替えに便利。 sdate = "2014/05/01"
# *** 表示期間(この場合は、日数)を指定 *** period = 1000 period = 30
# 表示開始日時を数値化(秒数) seconds = strptime("%Y/%m/%d", sdate)
# 数値化した表示開始日に表示期間を足して、最終日を算出 edate = seconds + period * 3600 * 24
# 横軸の表示期間を指定。(規制委員会のデータは新しいものが上になっているので?) noreverse を指定。 # この際、sdate はテキストデータの日時で、edate は、数値データで、この様に混ぜてもGnuplotが解釈してくれる。 set xrange [sdate:edate] noreverse
# *** 縦軸の放射線量の表示範囲を指定。これも自動でも良いのですが、特に複数地点のデータがあった場合、 # 特定の部分を良く見るには、手動で細かく設定するのがベスト。こういう操作もGUI化するともっと簡単になります。 *** # こういう場合でも、新しい設定をする際は、古い設定の下に、もう一行追加すると、切り替えに便利。 set yrange [0.01:50] set yrange [0.025:0.07]
# 気象データのファイル名を変数に覚えさせます。これらは、この例では、使われませんが。 met = "'Haneda_44_0371.csv'" # 気象データのラベルも変数に入れときます。 mn = '羽田'
# プロットコマンドの本体。バックスラッシュを使って、部分分けしてあり、コピペで編集がし易くなっています。 # ただし、このコマンドは、最初の行がコメント化されていて、その後も全部がコメントになっています。 # このように、長いプロットコマンドも、複数入れておいて切り替えがまあまあ簡単に出来ます。 # また、この最初の行は、ダミーです。詳しい解説は、後ほど #plot dummy(x) t '' \ , @met u 1:4 t ('風速 ('.mn.') m/s') axis x1y2 lc rgb "purple" \ , @met u 1:(-$5/2-2) t ('風向 ('.mn.') ') axis x1y2 lc rgb 'grey' \ , @met u 1:3 t ('気温 ('.mn.') ℃') axis x1y2 lc rgb "red" \ , @met u 1:2 t ('雨量 ('.mn.') mm') axis x1y2 lc rgb 'blue' \ , 'Kanagawa-ukishima.csv' u 5:6 t '浮島' lc rgb "dark-green"\ , 'Kanagawa-chidori.csv' u 5:6 t '千鳥' lc rgb "orange"\
#, @met u 1:8 t ('日照 ('.mn.') 分') axis x1y2 lc rgb 'orange' \
# 二番目の気象ファイルとそのラベル met = "'Hirono_36_1034.csv'" mn = '広野'
# 放射線ファイルとそのラベル (感雨情報を出すものは、変数化した方が便利なので) rf = "'Ookuma-ottozawa3.csv'" rn = '夫沢三'
# 縦軸の表示範囲の指定 (コメント化されているものと、実際に使われるもの) #set yrange [0.4:40] set yrange [18:30] # お任せ、自動で表示範囲を決めて貰うには、 こうしたり、 unset yrange とかやれば良いでしょう。 set yrange[*:*]
# 縦軸の対数表を指定。次の行で、温度などの右側は対数を解除。 # 線量率の開きの大きい複数の地点を表示する際は、対数表示の方が見易かったりします。 set log y unset log y2
# プロットコマンド本体。グラフは順に上書きされていくので、一番見たいものを最後の方に出すと良い。 # この例では、まず、感雨情報をだし、次に気象データを次々に出して、その後で線量データを表示。 # WindowsのMingW版でも、ディレクトリーの区切りはスラッシュのままで動くようです。 plot dummy(x) t '' \ , @rf u 5:(rain(strcol(8),$6)) axis x1y1 w boxes t ('感雨 ('.rn.')') lc rgb "light-blue" \ , @met u 1:8 t ('日照 ('.mn.') 分') axis x1y2 lc rgb 'orange' \ , @met u 1:4 t ('風速 ('.mn.') m/s') axis x1y2 lc rgb "purple" \ , @met u 1:(-$5/2-2) t ('風向 ('.mn.') ') axis x1y2 lc rgb 'grey' \ , @met u 1:3 t ('気温 ('.mn.') ℃') axis x1y2 lc rgb "red" \ , @met u 1:2 t ('雨量 ('.mn.') mm') axis x1y2 lc rgb 'blue' \ , @rf u 5:6 t (rn) \ , 'Ookuma-nomakata.csv' u 5:6 t '野馬形' \ , 'Ookuma-chooku.csv' u 5:6 t '大熊町町区' \ , 'Naraha-kamishigeoka.csv' u 5:6 t '上繁岡' \
# ここからは、実験用のコード。画面に表示して、同時にGifにも保存する、というのを試したのですが、 # 今のところ日本語が文字化けするのと、見たものをQtのグラフ窓のメニューからPNG形式などで # 保存するほうが、「みたまま」の結果が画像になるので、そっちを使っています。なので、最後の # 再描画(replot)コマンドは、コメント化されてます。 rlen = strlen(rf) -5 #print rf[2:5] of = (rf[2:5] eq 'Rad/' ? rf[6:rlen] : rf[2:rlen]) of = of.'_'.sdate[:4].'-'.sdate[6:7].'-'.sdate[9:10].'_'.period.'.gif' #print of #set terminal gif #set output (of) #replot
# 最後に念のため全部リセット reset


プロットコマンドの解説

プロットコマンドの本体部分は、バックスラッシュを使った複数行にまたがるもので、
コメントを入れることが出来ないので、こちらで詳しく説明します。

 
# 最初のダミーは、単にコピペでの行単位の切り貼りがしやすい様に入れてあるだけです。 plot dummy(x) t '' \
# 次の一行は、一番複雑なので、説明が長いですから、面倒だったら飛ばして簡単な例から見たほうが良いかも。 # # 感雨データの表示は、変数rfに入っているファイル名を初めは@を付けて(マクロで)利用していました。 # その後、マクロを使わなくても、(少なくともV4.6以降では)単に変数として扱っても問題ないのが分かったので、 # 現在使っているプロットスクリプトでは修正されています。 # # u は、using の省略形で、指定したファイルのどのフィールドのデータを使うかを指定します。 # # この場合は、まず、5で日時のデータを横軸(X軸)に使用し、縦軸(Y軸)は、rain という前述の関数に # 第8フィールドのデータを(strcol関数で))文字データとして渡して、「有」を検出したら、第六フィールドの値を使うという指定。 # 通常は、u 1:8 (あるいは、using 1:8) の様に、もっと単純です。 # # また、「axis x1y1」により、表示は、放射線量の表示範囲に従います。 # # 「w」は、with の省略形で、これだけ(例外的に)箱グラフを使うことを指定。  # # t は、title の省略形で、ラベルに「感雨 (」と感雨データのラベル変数、そして「)」を # くっ付けたものを使うことを指定。ここは、マクロとか色々やってみましたが、文字変数をこういう風にくっ付けたら出来ました。 # # lc は、linecolor の省略形で線グラフの色指定。ここは箱グラフなので、もしかしたら間違っているかも。でも、これでも色が出ます。 # # rgb は、色の形式のおまじないで、適当な色の名前がまあまあ使えますし、16進の色指定も出来ます。 # 更に、V4.7からは、線の色も透明度(というかアルファ)の指定が出来るようになりました。 # # そして、最後のバックスラッシュで、このコマンドが次の行にも繋がっているのを指定しています。 , @rf u 5:(rain(strcol(8),$6)) axis x1y1 w boxes t ('感雨 ('.rn.')') lc rgb "light-blue" \
# ここから、気象データの表示。最初のカンマで、別の線の記述であることを示しています。 # # @met で、文字変数が取り出されて、データファイルの指定になります。 # # u 1:8 で一番目の日時のフィールドと、8番目の日照のフィールドを指定。日照データを含まない地点もあります。 # # t 'タイトル' という形式で、線の凡例を出しますが、() の括弧の中に入れることで、文字列の連結などの操作が可能になります。 # # 気象データはグラフの右側の目盛りを使うので、axis x1y2 でY軸だけ、2番目のものを使うことを指定。 # # lc rgb 'orange' で、オレンジ色で表示する様にしています。 , @met u 1:8 t ('日照 ('.mn.') 分') axis x1y2 lc rgb 'orange' \
# 風速データは、上の日照と似たようなもので、使うフィールドと凡例の文字と色が違うだけ。 , @met u 1:4 t ('風速 ('.mn.') m/s') axis x1y2 lc rgb "purple" \
# 風向データは、第5フィールドの数値化された風向データを使いますが、少し計算して、出す位置を調整しています。 # # 文字列の操作と同様、() の括弧に入れると、そこは、計算式とみなされて評価され、関数とかも使えます。 , @met u 1:(-$5/2-2) t ('風向 ('.mn.') ') axis x1y2 lc rgb 'grey' \
# 次の2行は、日照などと同様、単純なのもの。ファイル名を変数に入れたのは、この様に何度も使うので、 # 短い名前の変数に入れておくと、編集も楽だし、何よりもフ使うァイルを変える時に、変数に代入する一行を # 変更するだけで済むからです。 , @met u 1:3 t ('気温 ('.mn.') ℃') axis x1y2 lc rgb "red" \ , @met u 1:2 t ('雨量 ('.mn.') mm') axis x1y2 lc rgb 'blue' \
# 線量データその一。 凡例の文字のところは括弧の中に文字変数名を入れて、それを使っています。 , @rf u 5:6 t (rn) \
# 線量データその二、その三、その四。とっても単純で、全部文字列を決め打ちしています。 # こんな感じで、幾らでも追加できますが、重くなるので、そこそこにしておいた方が良いです。 , 'Ookuma-nomakata.csv' u 5:6 t '野馬形' \ , 'Ookuma-chooku.csv' u 5:6 t '大熊町町区' \ , 'Naraha-kamishigeoka.csv' u 5:6 t '上繁岡' \

もっと簡単な、必要最小限のコマンドファイルの例

上の例では、色々なデータを組み合わせて表示するために、幾つかの工夫をしていますが、
気象データも感雨も無しで、上繁岡だけを表示する最小限の設定だと、こんな風になります。


#!/usr/bin/gnuplot -persist

set datafile separator ","
set timefmt x "%Y/%m/%d %H:%M"
set xdata time

plot 'Naraha-kamishigeoka.csv' u 5:6


このままだと、まず、表示日時の範囲が指定されてないので、

set xrange ['2014/01/01':'2014/07/05'] noreverse

という風に、横軸の範囲指定をすると、任意の期間を表示できます。

しかし、これだと、開始日時と終了日時の両方を編集しないとなりませんので、
開始日時を変数に入れておき、
sdate = "2013/05/01"

表示期間も変数にいれ、
period = 30

開始日時を数値化して、表示期間と足すことで、終了日時を計算してやります。
seconds = strptime("%Y/%m/%d", sdate)
edate = seconds + period * 3600 * 24
set xrange [sdate:edate] noreverse

こうすると、例えば月間表示をするならば、表示開示日時だけ編集すればよくなりますし、
一週間とか、2日だけ表示したいときも、表示期間の変数を変えるだけなので楽です。


また、既定の設定だと+でグラフが表示されるので、線グラフを指定すると(この場合は)見やすくなります。

set style data lines


日時の表示も、年月日の順で無いと気分が悪いので、変更。
set format x "%y/%m/%d\n%H:%M"


グラフの表示サイズを設定。(Qtを表示窓に使用した場合)
set term qt 1 size 820,320


と、こんな風に、徐々に色々な設定を学んで、追加したり変更しながら
覚えていくと良いでしょう。


色々な工夫

ファイル名を変数化して、それを凡例にも流用する。
filename = 'Naraha-kamishigeoka.csv'
plot filename u 5:6 t filename[:strlen(filename)-4]

t は「title」の省略形で、その後のfilenameという変数の中身の
最初の文字から、文字列の長さより4文字手前までを凡例に使用した場合。

この様に、文字列の「スライス([start:end])」の中で、関数や計算式が使えるので、
結構色々な文字列操作も出来そうです。
この点はPythonと似ていてとても便利ですが、Pythonは最初の文字が0番目なのに対し、
Gnuplotは最初の文字が1番目と指定する必要のある点などに注意が必要です。
まあ、慣れるまでは、面倒でもPrint文とか、対話モードで試して確認しながらやると、
デバッグの手間も省けるでしょう。
(私は、子供みたいに、指を折って文字数を数えたりしながらやってます。)


Gnuplotの文字列操作用の関数はシェルスクリプトと比較しても限られているので、私にとって便利なユーザー関数を少し作っています。

文字列置換ユーザー関数

再帰的に全部置換します。簡単な置換ならGnuplotから他のプログラムを呼び出すよりもこっちの方が良いかも。
また、Cygwinなどを使っていないWinユーザー向けのコマンドファイルでは、sedもawkも何もかも使えないかもしれないので、
このような小技でしのいだ方が面倒がないでしょう。

str_replace_one(s,pat,rep) = s[:strstrt(s,pat)-1].rep.s[strstrt(s,pat)+strlen(pat):]
str_replace(s,pat,rep) = (strstrt(s,pat) > 0 ? str_replace(str_replace_one(s,pat,rep),pat,rep) : s)

string = 'This is history'

print str_replace(string,'is','IS')
>>> ThIS IS hIStory

これを使うと、任意の区切り文字で、文字列を分割して、for ループの真似事が出来ます。
(words(s)及びword(s,i)は、空白のみを単語の区切りとみなす様ですので)

str = 'abc/de/fgh/ijk'
s = str_replace(str,'/',' ')

do for [w in s]{

print w

}

または、

do for [i=1:words(s)]{

print word(s,i)

}

同様に、(空白を含まない)文字列の中の(任意の区切りで分割した)最後の部分を取り出すとか、そういう文字列操作がしやすくなります。
str = 'abc/de/fgh/ijk'
s = str_replace(str,'/',' ')
print word(s,words(s))

基本的には、面倒な操作はPythonなり他のプログラムでやっておき、Gnuplotはグラフを出すだけ、というのが正解だと思いますが、
平均的なWindowsのユーザーは、Pythonも入っていないでしょうし、必要な要素が少ない方が、慣れていない人にはとっつきやすいでしょうから。


文字列を分ける関数です。

#文字列 s を最初の sep で分けた頭
cut_after(s,sep) = s[:strstrt(s,sep)-1]

#文字列 s を最初の sep で分けた尻尾
cut_before(s,sep) = s[strstrt(s,sep)+strlen(sep):]

#文字列 h の最後の最後の n の位置を見つける補助用の再帰関数。
strrstrts(h,n) = (strstrt(h,n) >= 1? strrstrts(h[2:],n): strlen(h))

#文字列 h の最後の最後の n の位置を見つける関数。
strrstrt(h,n) = strlen(h)-strrstrts(h,n)

#文字列 s を最後の sep で分けた頭
cut_after_last(h,n) = h[:strrstrt(h,n)-1]

#文字列 s を最後の sep で分けた尻尾
cut_before_last(h,n) = h[strrstrt(h,n)+strlen(n):]

s = 'aa23bb23cc23dd'
n = '23'
print strstrrt(s,n)
#>>> 11
print cut_after(s,n)
#>>> aa
print cut_before(s,n)
#>>> bb23cc23dd
print cut_after_last(s,n)
#>>> aa23bb23cc
print cut_before_last(s,n)
#>>> dd


数値から文字列への変換は、sprintf を使うと出来ますが、
print sprintf('%04d-%02d-%02d', 2014, 2, 3)
#>>> 2014-02-03

(数値の)文字列から数値への変換は、マクロを使うと出来ました。

set macro
a = '123'
b = 222 + @a
print b
#>>> 345


AM,PM表示のログなどから、Awkなどを使用しないで時間を読む

テレミノガイガーのログが、AM,PMのついて12時間表記で、そのままだとGnuplotは読み込めません。
通常は、Awkなどにかけて、変換したデータを読ませるわけですが、Gnuplotで直接読み込ませることもできます。

ログデータのフォーマット
28/06/2013,7:17:11 PM,00018.535,00000.051

Gnuplotで最低限必要なコマンド
# データフィールドの区切りをコンマとする
set datafile separator ","

# 読み取るタイムフォーマットの指定
set timefmt x "%d/%m/%Y %H:%M:%S"

# 二つのフィールドにまたがる、12時間制のデータを読んで、24時間制の一つのデータにまとめる関数
# dは、そのままで、tの方の時間の部分(t[1:2])にPMがあったら(t[strlen(t)-1:] eq "PM"?)12を加えて、
# 文字列に戻して残り(t[3:])とくっ付けるが、12時の時は、逆にPMでなかったら0にする、というもの。
# これで外部プログラムをいちいち呼び出さずに済みます。
datetimeX(d,t)=sprintf("%s %s%s",d,(t[strlen(t)-1:] eq "PM"? sprintf("%d",(t[1:2] eq "12"? 12:12+t[1:strstrt(t,":")-1])):(t[1:2] eq "12"? "0":t[1:strstrt(t,":")-1])), t[strstrt(t,":"):strlen(t)-3])

# 年月日だけを出力する指定(これは、お好みで変更してください)
set format x "%Y/%m/%d"

# ログファイルの指定。
f='Log.txt'

# 実際のプロットコマンド。お好みで、表示方法を変えてください。
# カラム(フィールド)1と2を関数に与えて、24時間制の一つのデータにまとめて、それでプロットしています。
plot f u (datetimeX(stringcolumn(1),stringcolumn(2))):3 every ::40 with dot


日本語の文字化け対策

set term pngcairo font "MS UI Gothic,10" size 820,340

CygwinのGnuplot(V4.6)の場合:

ホームディレクトリーに「.gnuplot」という設定ファイルを作って、その中に「set term x11 font "Ryumin-Light-EUC-H,14"」と一行入れておくと、それで解決するかも。

Gifなどに出力したい場合でも、「set term gif font "Ryumin-Light-EUC-H,14"」とやって、「set output 'test.gif'」とファイル指定をして、好きなファイルをプロットすると、日本語が出ました!(プロットしたら、「unset output」とかやると、ファイルに書き出されます。)

また、設定ファイルに「f = 'font "Ryumin-Light-EUC-H,14"'」の一行を入れておくと、他の場面でも 「set macro」でマクロを有効にして、「set term gif @f」という様に、簡単に指定できます。

全てのターミナルについて、フォントを指定できると良いのですが、「set font "Ryumin-Light-EUC-H,14"」とか試しましたが上手くいきませんでした。

また、pngとsvgは、gifと同様に日本語が出せましたが、pdf,emf,などについては、この方法では上手くいきませんでした。

現在、Cygwin版では、MSのフォントを使用し、エンコーディングはUTF−8にすると、一番使い易いです。

set term pngcairo font "MS UI Gothic,10" size 820,340

これだと、"Ryumin-Light-EUC-H,14"と違い、文字の大きさの変更が効きました。

Gnuplotの設定ファイルに、set term x11 font "MS UI Gothic,10" とか、入れています。


日本語の文字化けの際の確認事項

まず、使用しているGnuplotで、日本語が出るかどうか確認。
set encoding で、読み込むファイルやコマンドラインの文字コードを指定しない場合、
EUCのデータとして処理しているのかも。(昔は、Unix系ではEUCが普通だったので)

reset
set title '日本語'
plot sin(x)

Windows版の場合は、set encoding sjis とやると、良いかも。
reset
set encoding sjis
set title '日本語'
plot sin(x)

昨今の utf-8 の使う環境の場合、set encoding utf8 を入れて日本語が出るか確認。

reset
set encoding utf8
set title '日本語'
plot sin(x)

これで出ない場合は、フォントの設定が必要だったり、その環境のコードは、実は(sjisや)UTF8ではないのかも。
基本的に、set encoding で指定した文字コードと、フォントの文字コードが一致していれば良いわけですが、
他のソフトからデータを取り込んでいる場合、みんなUTF8でやり取りしていると思っていたら、
どこかにWindows版のソフトなどが紛れ込んでいて、途中でShiftJisになっていて、そこで文字化けする、とか、
そういう場合もあるので、込み入ったソフトの場合には、文字化け対策も面倒になったりします。

次に、画面表示で日本語が出るなら、PNGやEPSなどの必要な出力で同様に確認しますが、
その前に、show term で、現在の画面の出力設定を見ておくと良いでしょう。
x11, QT, などなど、色々ありますので。

gnuplot> show term
terminal type is qt 0 font "Sans,9"

reset
set encoding utf8
set title '日本語'

# PNG出力の指定
set term pngcairo font "MS UI Gothic,10"

# 出力ファイルの指定
set output 'JP-test-utf8.png'
plot sin(x)

# ファイルを閉じる。両方やる必要は無いようですが、念のため。
set output
unset output

# 元のQTの画面出力に戻しておく。
set term qt

これで、JP-test-utf8.png に日本語が出ていれば良いわけです。

以前、試してみた設定の残骸:
#set term x11 font "MS UI Gothic,10" size 1000,460
#set term gif font "MS UI Gothic,10" size 1000,460
#set term pngcairo font "MS-MINCHO,10" size 1000,460
#set title '日本語' font "MS-MINCHO"
#set title '日本語' font "MS-GOTHIC"
#set xlabel "{/GothicBBB-Medium-UniJIS2004-UTF8-H=24 漢字}"
#set ylabel "{/Ryumin-Light-UniJIS2004-UTF8-H=24 日本語}"


Mingw版、インストーラー付き(V5.0rc1 Qtターミナル)の場合:

対話形式で日本語を入れて表示すると、文字化けはしないものの、偶数番目の文字が出ない場合があるようですが、
これは、上記の様に、 set encoding sjis とやると良いようです。
かな漢字変換で送られてくる日本語は、UTF8ではなく、SJISなのでしょう。


Gnuplot で、移動平均や、一定時間の平均をだす方法

Gnuplotで、安直にグラフの平滑化をする方法を見つけました。

単純な移動平均の例は、Gnuplotのデモページにも載っているし、試してみたのですが、
時間軸をまとめてしまっておいてから、smooth unique を使うという平滑化の方法が
あるのを知って、色々試したところ、単純に時間軸のデータの分のところを切り取れば、
一時間当たりの平均地のグラフになり、時間の部分を切り取ると、一日平均になります。

このページを参考にしました。
http://www.ss.scphys.kyoto-u.ac.jp/person/yonezawa/contents/program/gnuplot/average.html

これは、移動平均ではありませんが、福島に増設されたあまり使い物にならない
モニタリングポストのデータをこの方法と、デモページの移動平均で比べたところ、
3日間のグラフだと移動平均の方が良いように思えますが、9日くらいだと
単純な一時間分をひっくるめた平均値の方が分かりやすい様に思いました。

9日間と、3日間のグラフで、それぞれ上が1時間分のデータを足して、その平均を使用したもので、
下が1時間(10分値が6点)の移動平均です。



あれこれ試していて、最初は上手くいかなかったのですが、Gnuplotが時間データを
どんな風にやり取りしているのかわかったら、色々出来るようになりました。

Gnuplotは、plot コマンドで関数などを使うことが出来ますが、その場合、
時間データとして宣言したものに於いては、単純に$5やらculomn(5)で
データを取っても変になっていて、stringcolumn(5)で生の文字列として
取り出して、それを日時(秒数)の数値データに変更したり、そのまま処理して、
出来上がったものも、日時の文字列データの形でGnuplotに渡してやると
安全な様です。


デモページの移動平均のやり方

移動平均のやり方。これは、時間軸はいじらず、データの方をどうにかする方法。
http://gnuplot.sourceforge.net/demo_4.4/data_feedback.html

上記のものを、単純に6回分にすれば、10分値のデータなので(欠損部分などを無視すれば)
一時間分の移動平均なので、これらの関数を使い、

 
samples6(x) = $0 > 5 ? 6 : ($0+1)
avg6(x) = (shift6(x), (back1+back2+back3+back4+back5+back6)/samples6($0))
shift6(x) = (back6 = back5,back5 = back4, back4 = back3, back3 = back2, back2 = back1, back1 = x)
init6(x) = (back1 = back2 = back3 = back4 = back5 = back6 = sum = 0)
plot rf u 5:6 t 'そのまま' lc rgb 'pink' ,init6(0), \ rf u 5:(avg6($6)) t '1時間移動平均' lc rgb 'black'

とかプロットすると、生データと移動平均が一緒に見られます。

注意点としては、私が使っているのは、規制庁のデータの要らない部分を削除して、
感雨データが「有」の場合に、線量データの数値にして、それ以外は0にする、という処理を
しただけで、 時間が前後逆になっている 為、過去データの移動平均ではなく、
未来データの移動平均になってしまっているかもしれません。
そのせいもあるのか、データの山がちょっとずれてるかも。


安直に時間軸を丸めて平均を出す方法

これに対して、安直に時間軸を丸めてやるのは、何の下準備も要らず、

 
plot rf u 5:6 t 'そのまま' lc rgb 'pink' ,  \
rf u (stringcolumn(5)[1:13].':30'):6 smooth unique t '1時間平均' lc rgb 'black'
 

とやると、日時のデータの時間までをスライスして使い、グラフの値が左にずれない様に30分足して、
後は、Gnuplotの smooth unique にお任せすれば、この場合なら、一時間分のデータをまとめた
平均値が自動的に表示されますし、データ処理の面でも移動平均とは逆に、まとめればまとめるほど
描画は軽くなるというオマケ付きです。

もっと詳しく解説すると、この部分がデータの中の5列目の日時のデータを扱う部分です。

(stringcolumn(5)[1:13].':30')

最初の stringcolumn(5) というのが、5列目のデータを文字列でそのまま受け取る仕組み。

日時のデータは、ここで扱っているのは 2014-07-22 10:20 の様な形式なので、 stringcolumn(5)[1:13]
という部分で、文字列データの1番目の文字から、13番目までを取り出すことにしています。
(最初の10文字で年月日まで。次の3文字で、空白も入れて、時間まで。)

そして、 .':30' で、取り去った分単位の情報の代わりに、一律に30分目にしています。
つまり、時間軸の「分単位」の情報を無視することで、その時間内のデータ六つを、
全部まとめてしまったわけです。

そのままだと、グラフ上に、点が縦に並んでしまいますが、「同じ時間軸のデータを全部足して、
その平均値を使いなさい」、という命令が smooth unique です。
これで、1時間分のでーたの平均値が、その時間の真ん中付近(30分)に置かれ、
ぐちゃぐちゃのグラフが均されるわけです。


一日平均を使いたい場合は、こんな感じ。

 
plot rf u 5:6 t 'そのまま' lc rgb 'pink' , \
 rf u (stringcolumn(5)[1:10].' 12:00'):6 smooth unique t '1日平均' lc rgb 'black'
 

時間と分の情報を取り去って、その日のデータを全部まとめて平均を出し、12時に置いています。


また、任意の時間にまとめる方法もあります。これは、上の参考にしたページの方法に
時間軸データを与え、それを日時の文字列データに戻してGnuplotに渡す、という
面倒なことをしています。
そうする代わりに、X軸を時間データとする宣言を取りやめてしまう、というのも出来そうですが、
その場合は、目盛りの表示を秒数の数値データから、日時の文字列に変換する必要があります。
私の場合は、生のデータで十分に綺麗なモニタリングポストと共通のplotコマンドを使用する為に、
X軸のその作戦はやらないつもり。

 
nearint(x)=(x - floor(x) <= 0.5 ? floor(x) : floor(x)+1)
filter(x,y)=nearint(x/y)*y
dfilter(x,y)=strftime('%Y/%m/%d %H:%M', filter(strptime('%Y/%m/%d %H:%M',stringcolumn(5)), y) )
plot rf u 5:6 t 'そのまま' lc rgb 'pink' , \ rf u (dfilter(stringcolumn(5),7200)):6 smooth unique t '2時間平均' lc rgb 'black'


これ以外に任意の窓で移動平均にする方法があるのですが、
http://blog.sam.liddicott.com/2013/05/gnuplot-rolling-average.html

この関数を
avg(x, n) = ( avg_data = sprintf("%s %f", (int($0)==0)?"":avg_data, x), sum_n(avg_data, samples(n))/samples(n))

こんな風に時間データでやり取りするようにする方法も試していますが、再帰が止まらないのか、
まだ成功していませんし、窓が大きくなった時に重くなりそうなので、大きくまとめる場合は、
安直な方法で良い様にも思います。

 
davg(x, n)= ( avg_data = sprintf("%s %f", (int($0)==0)?"":avg_data, strptime('%Y/%m/%d %H:%M',x)), strftime('%Y/%m/%d %H:%M',sum_n(avg_data, samples(n))/samples(n)))
plot rf u 5:6 t 'そのまま' lc rgb 'pink' , rf u (davg(stringcolumn(5),12)):6 smooth unique t '2時間移動平均' lc rgb 'black'

通常は、Gnuplotにそんなに頑張って貰わずに、Pythonとか他の道具でデータの下ごしらえをして、
Gnuplotには、単純に描画して貰う様ですが、それはそれで効率よくやろうとすると色々と
面倒なことが増えたりするので、Gnuplotで出来てしまうのであれば、その方が楽です。
というか、時間軸も含めた、幾つかの移動平均くらいは、難しいことではないでしょうし、
Gnuplotの内部で、ガリガリに最適化したものを準備しておいてくれると嬉しいです。

まあ、そうなると、RやOctaveとか、そういう道具があるし、Python系でも
Numpy Scipy やらSageもあります、という話になるのでしょうが、
Gnuplotは色々な意味で結構気に入ったので、まずは、これでやれるところまで
やってみるつもりです。


ともかく、感度の悪い(あるいは、内部での計算のしかたとかがまずい?)ギザギザで
ぐちゃぐちゃのモニタリングポストのデータも何とか活用しようと思ってやってはみましたが、
今のところ、頑張って平滑化しても、それほど細かいことが分かるようになるわけでも無いですし、
やっぱりもっとマシな測定機を設置するなり、数は少なくてもスペクトルも取って感雨情報もある
「使える測定機」を設置して欲しかったです。

メーカーも、文科省などの「仕様」を満たしているだけの機械を作らず、もっと役に立つ
測定機を作ってくれるぐらいの「心意気」なり「余裕」なり「サービス精神」を
持っていたらと思いますが、そういうのを期待する方が間違っているご時勢なのかもしれません。


Cygwin 用Gnuplot 5.0 rc1のバイナリー

CygwinでGnuplotを使っている場合、Setup.exeで入ってくるのは4.6で、
透過性のある色を線に使うことが出来ません。そこで、最低でも4.7が欲しいのですが、
最新版の5.0rc1のバイナリーが既に作成されていました。
(自分でコンパイルすればよいのですが、ライブラリーなども落としてこないとなりませんし)
http://www.tatsuromatsuoka.com/gnuplot/Eng/cygbin/

ここで、32Bitか64Bitのものを落としてきて、Zipの中身のoptと、
X11のリソースファイルをコピーして、後は、元からあるGnuplotを
どうにかして(私は、単に名前をGnuplot46に変えて残しました)
新しいものをAliseで登録するか、Symlinkを張れば出来上がり。
(README_TM.txt に詳細があります。)

今のところ大変快適に動いています。


PythonでGnuplotとお話する

Gnuplotと外部のスクリプト言語などを組み合わせるやり方には、
スクリプトからGnuplotを呼び出す方法と、
その逆にGnuplotからスクリプトを呼び出す方法、
その組み合わせなどがあります。

また、外部からGnuplotを呼び出す場合、特に複数の(沢山の)グラフを
自動的に作りたい場合、外部コマンドでGnuplotのループや複数のプロット文を作り、
それを一挙にGnuplotに与える方法と、一つ一つGnuplotに与える方法があります。

簡単なグラフを一つか二つ描画する場合は、別にどんな方法でやっても
たいした違いが無いので、一番面倒の無い方法を選べば良いと思いますが、
数百、数千のグラフを毎日生成しよう、とか思うと、余りにも非効率な方法は
避けた方が良いでしょう。

前置きが長くなったので、本題に入ると、Gnuplotの対話環境を
一度立ち上げて、一連の作業が終わるまで維持した状態で、
連続的に複数のコマンドを実行できると、エラーなどにも対処しやすくて
便利な場合があり、PythonのSubprocessのパイプを使ったやり方などが
しばしば使われます。

しかし、Windows環境だと、双方向通信を簡単かつ確実に行うのは
結構面倒な場合が多く、色々と試した結果、expectのPython版の
Windows版を使うと、一番良い様に思いました。

Webに色々なバージョンが転がっているのですが、これを使ったところ動きました。
https://bitbucket.org/mherrmann_at/wexpect/src/d1b9f7d81e378136303822a326dbe447de1eb351/wexpect.py?at=master

Pythonは、Windows用のPythonを使う必要があります。(Win32関連のモジュールが必要で、Cygwin版にはそれらが無い為)
 http://www.python.org/ で配布されている普通のWindows用のインストーラー付きのものを入れれば良いだけです。

また、Gnuplotは、Mingw版で良いのですが、wgnuplot.exe では無く、Dos窓で動く gnuplot.exe を指定する必要があります。

使い方は簡単で、モジュールをインポートして、Gnuplotを立ち上げたら、
expectでプロンプトを指定し、プロンプトが出たら、何かコマンドを与える、という風にしておいて、
interact()をかけると、その部分が実行されます。

 
import wexpect
p = wexpect.spawn(r'''C:\Program Files (x86)\gnuplot\bin\gnuplot.exe''')
p.expect('gnuplot>') p.sendline('show term') p.interact()
p.expect('gnuplot>') p.sendline('plot sin(x)') p.interact()

沢山コマンドがある場合には、それらをリストに入れておいて、
ループで回したりmapを使うなり、お好みの方法で与えれば良いでしょう。

こうすることで、Gnuplotが「よっこらしょ」と立ち上がるのは、最初の一回だけになるので、
無駄が省けます。

ただ、単純に一番早い方法、というのであれば、Gnuplot用のコマンドファイルを
作っておいて、それを一挙に食べさせるのが、やっぱり面倒もないし、早いかもしれません。

この方法の利点は、Gnuplotの返事を調べて、次に与えるコマンドに
反映させたり出来る点です。


GnuplotMemo2

私が時々使う事柄などのメモです

Gnuplot Memo2

GnuplotMemo続編:3Dガンマ線スペクトル

線表示で色を付けた例(データの前処理無しで出力)

原発の直ぐ近くの夫沢モニタリングポストのスペクトルデータを3D描画した例。
プルームの通過が良く分かります。面表示(グリッドデータに前処理して出力)。
プロット用コマンド・データ一体型ファイルは大きいので要注意。これを使って自分のマシンで描画すれば、
マウスで動かしたりズームしたり出来ます(対話環境から実行した場合)し、変更なども簡単。
http://pico.dreamhosters.com/raddata/ja/2011_spector_all/201103_spc08_ottozawa.plt

ガンマ線スペクトルの時系列データなどを3D表示してみました。詳しくは、以下のページをご覧ください。


Gnuplotで、ガンマ線スペクトルのピークフィットをしてみる


Gnuplotで作った放射線量率や気象データのグラフ


関連するページ


Radiation Detection / English Documents ... Francais ... 日本語ページインデックス / Survey Links ... 掲示板 / 放射線量グラフの読み方
Last modified : Sat Jan 16 11:36:56 2016 Maintained by nkom AT pico.dreamhosters.com