忍者ブログ
物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
(2016/9/12 追記) 自分の孵化数がさらに増えたので画像とデータを置き換えた

統計数も増えてきたので、グラフから現状では
2km卵の孵化は 5~10個の飴
5km卵の孵化は 10~23個の飴(23個の飴が1イベントなので、たぶん25個まで伸びそう)
10km卵の孵化は 16~31個の飴(こっちは孵化の総数が少なすぎる)
がもらえる

5km卵で、10個と21個でピークがあるのが謎




(2016/9/7 追記) 自分の孵化数が増えたので画像とデータを置き換えた




ポケモンGOの卵孵化時にもらえる飴の数を調べてみた

結果↓
横軸が飴の数
縦軸がその頻度

pic_myegg自分で孵化した卵のうち1つだけもしかしたら見間違えたデータがあるかもしれない・・・(コイキングの卵から15個の飴がもらえた)
それを見ないことにするなら、
・2km卵からは5~10個の飴がもらえる
・5km卵からは10~25個の飴がもらえる
・10km卵からは15~30個の飴がもらえる
ってことになりそう
ゲーム制作者側がキリのいい数字を設定してるだろうと思って、こういう風に見てるけど、もしかしたらもっと端数なのかもしれない

あとtwitterから拾ってきたデータがもしかしたら飴が極端に多い(少ない)例を持ってきてしまっている可能性もあるので(けど今回はまだ1人のtwitterアカウントからしか収集してない)
分布の形については見ない方がいいです
ひとまず最小値と最大値が知りたかっただけなので・・・

ただ分布の形を見るなと言われても、5km卵の分布は両端が極端に多いがなんでだ?
本当にこういうもんなのか?




これを書いたgnuplotを使ったスクリプトコード
#!/bin/sh

input1=myegg.txt
input2=twitter.txt

xmin=0
xmax=30
nbin=30
ymax=20

BW=0.3

for distance in 2 5 10
do
awk "{if(\$3==${distance}){print \$1}}" ${input1} > tmp1.txt
awk "{if(\$3==${distance}){print \$1}}" ${input2} > tmp2.txt
cat tmp1.txt tmp2.txt > ${distance}.txt
cat ${distance}.txt | gsl-histogram ${xmin} ${xmax} ${nbin} > hist_${distance}.txt
done

basename1=${input1##*/}
filename1=${basename1%.*}

gnuplot <<EOF

set term png
set output "pic_${filename1}_opacity.png"

set title "written by @coffee_pote" noenhanced

set xlabel "number of candy"
set ylabel "histogram"
set xrange [$xmin:$xmax]
set yrange [0:${ymax}]
set xtics ${xmin}, 2, ${xmax}
set mxtics 1.0

set style fill transparent solid 0.5 border lc rgb "black"
set boxwidth 1.0

plot \
"hist_2.txt" u 1:3 w boxes lc rgb "orange-red" title "2km", \
"hist_5.txt" u 1:3 w boxes lc rgb "light-green"title "5km", \
"hist_10.txt" u 1:3 w boxes lc rgb "purple" title "10km"

unset style

set output "pic_${filename1}.png"

set style fill solid border lc rgb "black"
set boxwidth ${BW}
plot \
"hist_2.txt" u 1:3 w boxes lc rgb "orange-red" title "2km", \
"hist_5.txt" u (\$1+${BW}):3 w boxes lc rgb "light-green"title "5km", \
"hist_10.txt" u (\$1+${BW}*2):3 w boxes lc rgb "purple" title "10km"

EOF



データは2種類ある
1つは自前で測定したデータ
2つめはtwitterで「孵化 pic」とかで検索してひとつひとつ数えたデータ

■ myegg.txt
0 飴の個数 0
16 エレブー 10
19 ビリリダマ 5
5 コイキング 2
25 イーブイ 10
17 メノクラゲ 5
7 ピカチュウ 2
25 カイロス 10
9 ズバット 2
13 ニドランオス 5
21 ビリリダマ 5
8 キャタピー 2
19 アーボ 5
19 ブーバー 10
5 ゼニガメ 2
17 マダツボミ 5
14 アーボ 5
8 ビードル 2
8 コイキング 2
20 タッツー 5
20 ニドランオス 5
10 ポッポ 2
21 ニドランメス 5
17 メノクラゲ 5
10 ポッポ 2
20 ナゾノクサ 5
8 コラッタ 2
19 ガーディ 5
6 ゼニガメ 2
15 コイキング 2
16 コダック 5
10 ワンリキー 5
8 ポッポ 2
20 イーブイ 10
10 コイキング 2
20 サワムラー 10
16 モンジャラ 5
9 キャタピー 2
28 イーブイ 20
17 スリープ 5
18 ドードー 5
5 キャタピー 2
9 コイキング 2
21 パラス 5
14 ケーシィ 5
18 マンキー 5
10 コイキング 2
5 ヒトカゲ 2
16 マンキー 5
13 シェルダー 5
20 ヒトデマン 5
5 ゼニガメ 2
13 ヒトデマン 5
21 サイホーン 5
6 ヒトカゲ 2
17 ガーディ 5
15 コダック 5
17 サンド 5
8 コラッタ 2
6 コイキング 2
13 ロコン 5
9 コラッタ 2
16 マダツボミ 5
16 ニドランオス 5
11 ドードー 5
10 ビードル 2
8 ビードル 2
26 イーブイ 10
21 マンキー 5
6 ビードル 2
16 シェルダー 5
21 ナゾノクサ 5
10 ヒトカゲ 2
8 ポッポ 2
10 ビードル 2
8 ズバット 2
10 キャタピー 2
8 イシツブテ 2
15 ニドランメス 5
21 サンド 5
さっき書いた通り、これ↓全部一人の孵化です
すごい・・・
■ twitter.txt
10 ロコン 5
15 コンパン 5
21 ニドランメス 5
13 サイホーン 5
23 ポニータ 5
31 カイロス 10
17 ラプラス 10
19 カイロス 10
10 ヒトカゲ 2
12 コイル 5
18 スリープ 5
11 ケーシィ 5
21 マダツボミ 5
29 カビゴン 10
12 ディグダ 5
5 ヒトカゲ 2
7 キャタピー 2
8 コラッタ 2
21 ポニータ 5
5 ズバット 2
21 ニドランオス 5
10 ニャース 5
18 コンパン 5
21 ナゾノクサ 5
10 トサキント 5
10 ニドランオス 5
12 ニドランメス 5
19 ガーディ 5
19 カラカラ 5
10 ヒトデマン 5
15 スリープ 5
12 サンド 5
10 ナゾノクサ 5
10 ナゾノクサ 5
14 ナゾノクサ 5
16 ナゾノクサ 5
5 オニスズメ 2
19 カイロス 10
17 ラプラス 10
15 ナゾノクサ 5
13 コダック 5
21 シェルダー 5
18 カブト 10
17 ラプラス 10
29 ルージュラ 10
17 ヤドン 5
18 クラブ 5
17 カラカラ 5
14 マンキー 5
10 ワンリキー 5
18 アーボ 5
10 アーボ 5
15 ニョロモ 5
16 ニョロモ 5
10 ヤドン 5
9 フシギダネ 2
10 フシギダネ 2
21 ポニータ 5
31 カイロス 10
13 サイホーン 5
10 ロコン 5
15 コンパン 5
21 ニドランメス 5
22 イーブイ 10
21 ヒトデマン 5
21 コダック 5
21 パラス 5
10 ロコン 5
15 コンパン 5
21 ニドランメス 5
13 サイホーン 5
10 ニドランメス 5





PR
ググったら1件だけ出てきた
かなりごり押しの方法だけど・・・

■ 参考 : スケールの違う複数の軸を描きたい.

(最終更新日2002年だけど、gnuplot 5でも動きます)

上記ページで紹介されている方法は、簡単にまとめると
・multiplotを使う
・2枚目の図を1枚目の図と重ねるように配置して、2枚目の図の軸をx軸以外消す
・そうすると、求めている1枚の図にx2軸を使わずに複数のx軸を付けられる
という感じ

ちなみにこの方法はきちんとset originを選ぶと、3つ軸を付けたりと応用ができます




こんなのが作りたい

pic_multi_axis

プロットしたいデータは2つある
data1.txtとdata2.txtで、それぞれ2次元のデータ
1列目が2の累乗の指数(10, 11, 12...25)
2列目がなんかの数字(ひ み つ)

やりたいのはx軸をまず10, 11, 12..25としてプロットする
その下に、その数字が(2**x)/4096.0でどんな数字に対応するかをプロットさせたい
いや、別に書かなくても計算したら良いジャマイカとおもうかもしれませんが、めんどくさいので付けときたい

コードはこんな感じ
#の後はコメント文なので無視してください
#まずはグラフのお化粧
set log y
set mytics 10
set grid ytics mytics #これでかなり細かいgridがかける

set xlabel "log2(N)"
set ylabel "something"

set term png size 1080, 1080 fontscale 2.0 noenhanced #sizeは適当でいいけど、小さすぎると見にくいので注意
set output "pic_multi_axis.png"

set size 1.0, 0.55 #1.0は固定
# 0.55の部分に入る数字をAと置いておく、後のことも考えて帳尻あわせが必要
# あとに出てくるset originのyの値2つとA + 0.30 + 0.15 = 1.0になるようにAを書いておく

# marginは隙間のサイズのこと bは底(bottom)、lは左、rは右
# lmarginはylabelが入る関係で、ある程度の大きさを取っておく必要がある
# 一度 set lmargin 0としてみたらいい、1つめのx軸と2つめのx軸がずれてしまう
set bmargin 0 #上記のA+0.3+0.15=1の計算のために0にしておく
set lmargin 10
set rmargin 10 #これはいらないかもしれない

set multiplot #ここがミソ
set origin 0, 0.3 #1枚目の図をどこから書くかを決めている(0, 0.3)の位置から書く、つまり少し下に隙間を開ける

# このrange指定が大事、このrangeと2枚目の軸のrangeが1対1で対応するように設定する
set xrange [10:25]
set yrange [100:10000]

# 適当にプロット(ここでreplotを使うのはNG)
plot "data1.txt" w lp pt 5 ps 2 title "data1", \
"data2.txt" w lp pt 5 ps 2 title "data2"

# 2枚目のグラフを配置する
set origin 0, 0.15
# ここもミソ、x軸以外のいらない部分をすべて消している(もしかしたら余計なオプションを書いてるかもしれない)
unset ytics
unset y2tics
set nomy2tics
set xtics nomirror
set border 1
unset grid
# 2つめのz軸のラベルを指定する
set xlabel "T[s] at f_s=4096[Hz]"
# y軸のラベルは消しておかないと、もう一度表示されるので注意
set ylabel " "

set log x

# このあたりは1つめのx軸と1対1で対応するようにxticsで手で配置しているだけ
set xtics (0.25, 1, 4, 16, 64, 256, 1024, 4096)
set xrange[0.25:8192]
# yrangeは何も書かないと上記のものが反映されてしまう、とりあえずデータ点がプロットされないような範囲を取っておけばOK
set yrange[0.1:0.2]
plot "data1.txt" u (2**$1/4096.0):(0.001) notitle

unset multiplot


あまりにごちゃごちゃしてたので、コメントなしのコードは以下に

set log y
set mytics 10
set grid ytics mytics

set xlabel "log2(N)"
set ylabel "something"

set term png size 1080, 1080 fontscale 2.0 noenhanced
set output "pic_multi_axis.png"

set size 1.0, 0.55

set bmargin 0
set lmargin 10
set rmargin 10

set multiplot
set origin 0, 0.3

set xrange [10:25]
set yrange [100:10000]

plot "data1.txt" w lp pt 5 ps 2 title "data1", \
"data2.txt" w lp pt 5 ps 2 title "data2"

set origin 0, 0.15
unset ytics
unset y2tics
set nomy2tics
set xtics nomirror
set border 1
unset grid
set xlabel "T[s] at f_s=4096[Hz]"
set ylabel " "

set log x

set xtics (0.25, 1, 4, 16, 64, 256, 1024, 4096)
set xrange[0.25:8192]
set yrange[0.1:0.2]
plot "data1.txt" u (2**$1/4096.0):(0.001) notitle

unset multiplot











20本くらいの線を引くときに、色を手で指定していると大変なので、グラデーションを使ってみる

■ 参考 : gnuplotでグラデーション

■ 参考 : Gnuplot color interpolation for set of linear functions

■ 参考 : gnuplotで簡単に色を指定するためのちょっとしたTips



動くかわからんけど、こんな感じメモメモ
set paletteというのがミソ
あとcolorboxというのをunsetしないと右側に色の説明のためのbarが出る
それが必要ならunsetはコメントアウトしておく
#set palette rgb 33,13,10;
#set palette rgb 3, 2, 2;
set palette model HSV
unset colorbox
plot \
n=0, \
"hoge1.txt" u 1:2 w l lw 4 lc palette frac n/5,0 title "hoge1",\
n=2,\
"hoge1.txt" u 1:2 w l lw 4 lc palette frac n/5.0 title "hoge2",\
n=3,\
"hoge1.txt" u 1:2 w l lw 4 lc palette frac n/5.0 title "hoge3",\
n=4,\
"hoge1.txt" u 1:2 w l lw 4 lc palette frac n/5.0 title "hoge4",\
n=5,\
"hoge1.txt" u 1:2 w l lw 4 lc palette frac n/5.0 title "hoge5"





set term png
set output "blog1.png"
set multiplot layout 1,2
set title "Plot 1"
plot sin(x) w l lw 2 lc 1
set title "Plot 2"
plot cos(x) w l lw 2 lc 2
とすると、
blog1

これでは全体のtitleではなくて、それぞれの図のtitleになってしまう・・・



■ 参考サイト : gnuplot demo script: layout.dem

ここを見ると解決方法が載ってた
set term png
set output "blog1.png"
set multiplot layout 1,2 title "Total title" font ",14"
plot sin(x) w l lw 2 lc 1
plot cos(x) w l lw 2 lc 2
これで
blog1
文字のフォントをいじって少し文字サイズを大きくした方が見やすそう







x軸が時間のデータをプロットする設定は、
set xdata time
で有効になる
ydataとするとy軸で有効になる

入力データのフォーマットは自分で指定する
例えば
set timefmt "%y/%m/%d"
/じゃなくて:とかでデータを区切っている場合は、:に置き換える


set timefmtの中身は自分で次のものを用いて指定する
%d : 何日, 1-31
%m : 何月, 1-12
%y : 何年(下2桁), 0-99
%Y : 何年(西暦4桁)
%j : 一年の何日目, 1-365
%H : 何時, 0-24
%M : 何分, 0-60
%S : 何秒, 0-60
%b : 月名(英語)の3文字省略形
%B : 月名(英語)

また、rangeの指定も、このtimefmtに基づいて指定することに注意する
set timefmt %y/%m/%d"
set xrange ["95/03/21":"95/03/22"]

データをプロットするときは"必ず" usingを使う必要がある
またformat xで、実際にどのようにx軸に表示されるかを指定することができる
set timefmt "%%y/m/%d"
set xrange ["95/03/21":"95/03/22"]
set format x "%m/%d"
plot "time.data" using 1:4








三項演算子というのを使う

まずはデータの準備
gslの乱数生成コマンド+行数
gsl-randist 0 20 flat 0 5 | awk '{print NR, $1}' > foo.txt
このhoge.txtを使う

中身はこんな感じ
1 4.99871
2 0.814549
3 1.41309
4 4.73601
5 1.15828
6 2.42487
7 4.78738
8 3.72153
9 2.70022
10 3.69976
11 3.79972
12 3.29318
13 1.57819
14 4.02202
15 2.59836
16 0.842862
17 2.37765
18 1.96157
19 1.10834
20 1.06595
単純にプロットしてみる

https://coffeepote.tumblr.com/post/651759549899014144

次の2列目の値が3以上の場合は、そのまま使ってそうじゃない場合は全部1にしちゃう
plot [:][0:5] "foo.txt" u 1:($2>=3 ? $2 : 1) w p pt 5 ps 2


https://coffeepote.tumblr.com/post/651759559024820224


2列目の値が3以上の場合は、そのまま使ってそうじゃない場合は全部捨てる場合、
plot [:][0:5] "foo.txt" u 1:($2>=3 ? $2 : 1/0) w p pt 5 ps 2

https://coffeepote.tumblr.com/post/651759567585329152


この三項演算子は便利だけど、シェルスクリプトの中で書くときは
シェル変数を呼び出す$2とかと被ってしまうので上記のコマンドを\$2とすることをお忘れなく・・・・
と自分のために書いているんだけど、絶対にそんなことを忘れてエラーが出てから気づく・・・
まったく成長していない・・・・


この三項演算子を使ったデータのフィルターはかなり便利・・・
本当ならawkとかを使って、データを整形しなおすところだけど、これを使えばそんなことを気にせずgnuplot内で加工できちゃうので・・・・




他にもこれを使って
plot "foo.txt" u 1:($2*$1) w p pt 5 ps 2
のように、1列目の値と2列目の値を掛算した値をプロットとかもできちゃう・・・

https://coffeepote.tumblr.com/post/651759567585329152

absで絶対値を取ったり、sqrtで平方根を取ったりもできる
gnuplotはできる子











ひとつ前の記事 で書いたdemoをざっと眺めていたらいくつか面白そうなプロットを見つけたのでメモしておく



これ↓ (実際にgnuplotのソースコードに入っているdemoを走らせた結果です)
gnuplot ガントチャート

■ 参考 : gnuplot demo script: gantt.dem

確認してみたらgnuplot 4の頃はこのdemoはなかったっぽい
よくよくコードの中身を見たら、別にガントチャートモードとかがあるわけではなくて、矢印と文字テキストの配置を工夫してあるだけか・・・
そのうちどこかで使えないかなぁ〜












を紹介しているページを見つけたので、リンク貼っときます
(自分ではやらないのかーい・・・)

たまたま、gnuplot 5.0のソースコードを探していて見つけてしまった・・・

■ 参考 : gnuplot version 5 について



gnuplot 5.0の新機能について、自分の感想メモ

o デフォルトの線の色が変わった
使ってみて最初に気づく変化だと思われ
最初は気に入らなかったけど、もう慣れてきた
set colorsequence classic
で昔の色合いに戻せるのか・・・
まぁもう慣れたからいいや・・・
classic colorは2番目の色の緑色がスライド発表には不向きすぎる・・・

o 破線の変更
3種類x3種類みたいなプロットを同じ1枚に収めないといけないときに
破線を使った覚えがある・・・
3種類の色で、3種類の破線を使うとまぁ見れるグラフになった気がする
ただ、自分の環境ではepsでしか破線が使えなかったのでそれは変わったのかな?

o enhanced text
boldとかもできるようになったらしい・・・
まあ論文で使うグラフくらいしかこの機能はいらないかな〜
グラフの上に文字を載せるだけなら、Macのプレビューで十分だと思うのでそっちでやった方が楽だと思われ

o import 機能
言語でコンパイルして作ったdllファイルを読み込むコマンドimportが導入されました。これにより、c言語で書いた関数をgnuplot上で用いることが出来るようになります。
これの良さがいまいちわからぬ・・・
米澤氏の記事に期待
(何歳なんだとうと思ってプロフィール見たら、だいたい37歳かちょい上の方っぽい)


どうでもいいけど、ここ5年くらいでiOSが頻繁にアップデートしていて、そのたびに(無駄だと感じてしまう)新機能を付けてくる
それに比べたらgnuplotのアップデートは緩やかだが着実なもので、またiOSの新機能に比べたら非常に有意義な新機能だと感じた・・・・
開発に関わっているメンバーの方々、本当にありがとうございます!(たぶん外国の方々だから、ここで書いてもしょうがないけど・・・)



あとはここもdemoも新しくなっているのでチェックすると面白いかも
ネットでdemoを見るならこちらからどうぞ
■ 参考 : Demo scripts for gnuplot version 5 (pngcairo terminal)














これまでのgnuplotの命名規則からして unenhanced だろ〜?
と思って意気揚々とコマンドを打ってみたが、設定が反映されない・・・

gnuplot 5.0のマニュアルで「enhanced」で調べてみたら、どうやらnoenhancedらしい
gnuplot noehnahced
メモメモ・・・


このときついでに知ったが、
set title "hoge" noehanhced
みたいな感じでtitleだけenhancedを解除したりできる

これで、勝手にTeX表記みたいな下付き文字になるのを防げる
あとで気づいたけど、これもgnuplot 5.0以降でしか使えないオプションらしい

# タイトルを今後はgnuplot version 5以降の記事については【gnuplot5】とすることにします
# 右の検索窓でgnuplot5で検索すれば一括で表示されるはず








以前、Macでgnuplotを使った際にいろんなフォントを指定する方法を記事にした
■ 過去記事 : 【gnuplot】png出力時にいろいろなフォントを使いたい

Macの場合はフォントは /Library/Fonts/以下にまとめられているらしい



Scientific Linuxの上でgnuplotを起動すると、毎回
Could not find/open font when opening font "arial", using internal non-scalable font
のようなエラーが出て鬱陶しい・・・

調べたら解決方法がわかった
# gnuplot
setenv GDFONTPATH "/usr/share/fonts/vlgothic"
setenv GNUPLOT_DEFAULT_GDFONT "VL-Gothic-Regular"
とでも .cshrc に書いておけばいい

■ 参考 : GNUplot の画像出力でのフォント指定

■ 参考 : fontconfig - フォントの設定 [Linux]







(2017/2/10 追記)
Macで、デフォルトで入っているフォントディレクトリではなくて、自分でインストールしたフォントのインストール先は
~/Library/fonts/以下

なので自分でインストールしたフォントもgnuplotで使いたい場合は、.cshrcに
# gnuplot
setenv GDFONTPATH /Library/Fonts:${HOME}/Library/Fonts
と書いておいた方がいい









数時間前にLIGOから世界初の重力波直接検出が発表されました
検出に関する論文はこれ
Observation of Gravitational Waves from a Binary Black Hole Merger

ダウンロードは有料なので、できない人はLIGO公式ページで落とすこともできます
Observation of Gravitational Waves from a Binary Black Hole Merger





また、詳細だけを知りたいorグラフだけを見たいときはこちらをどうぞ↓
Data release for event GW150914


重力波信号が含まれているデータも公開されていて、「Gravitational-Wave Strain Data」という項目からダウンロードできます
この記事では、その実際のデータをgnuplotでプロットしてみたいと思います

※ 残念ながら、この通りにやっても肉眼では重力波信号はおそらく見えません・・・
よく考えたら当然なんですが・・・
どうやってFIG 1を書いた方はこちらを読んでもらえると分かると思います
https://losc.ligo.org/s/events/GW150914/GW150914_tutorial.html
(今はなんかアクセスできないが、たぶん鯖落ちだと思われ)


Data release for event GW150914
このページにアクセスして、

2016-02-12 8.14.19


ここをクリックすると、こんな感じの画面が表示されるはず

こんなの


3種類のデータが提供されていて、
hdf5 : 使ったことないのでわからん、pythonやMATLAB他で使えるらしい
gwf : フレームファイル形式、読み込むために frame library というパッケージが必要、重力波業界で広く用いられているフォーマット
txt.gz : txtファイルを圧縮したもの
左がHanfordという検出器、右がLiivingstonという検出器のデータ
あと上の表は、データのサンプリングレートが4096Hz
下が16384Hz
おそらく元々は16384Hzだったはずなので、上はダウンサンプルという処理をしたあとのデータだと思われ

では早速ダウンロードしてみる・・・
今回は
・4096Hzサンプリング(上の表)
・32second
のデータを使ってみる


ダウンロードしたtxt.gzを解凍する
gzip -dc L-L1_LOSC_4_V1-1126259446-32.txt.gz > L-L1_LOSC_4_V1-1126259446-32.txt
gzip -dc H-H1_LOSC_4_V1-1126259446-32.txt.gz > H-H1_LOSC_4_V1-1126259446-32.txt
中身を見てみるとわかるが、このままでは重力波信号が含まれている主干渉計信号しかない・・・
つまり、どの値がどの時刻に対応しているかわからない・・・・

幸い「このデータはGPS時刻 1126259446 からのデータで、重力波信号は112625962 に来ました」と書いてあるので、
一番始めの値が時刻はGPS=1126259446に対応してて、そこから1秒間に4096回ずつ、サンプリングされているということ



このデータを使って、時系列のグラフを描いてみる
gnuplotを起動して次のようなコマンドを打つ
set xlabel "GPS[s]"
set ylabel "strain signal"
plot "H-H1_LOSC_4_V1-1126259446-32.txt" w d title "LIGO-Hanford"
こんな感じ(あとで全部一括で行うスクリプトも書いておきます)

H-H1_LOSC_4_V1-1126259446-32L-L1_LOSC_4_V1-1126259446-32


次に、x軸の値を調整する(今はデータの通し番号、上から何行目かが示されている)
set xrange [0:32]
set xlabel "GPS[s] - ${GPS}"
set output "H-H1_LOSC_4_V1-1126259446-32_v1.png"
plot "H-H1_LOSC_4_V1-1126259446-32.txt" u ($0/4096.0):1 w d title "LIGO-Hanford"
こんな感じで $0 をサンプリングレートで割ればよい

H-H1_LOSC_4_V1-1126259446-32_v1L-L1_LOSC_4_V1-1126259446-32_v1


論文によると、今回の重力波の検出器への到来時間差が書いてあった
GW150914 arrived first at L1 and 6.9 +0.5/-0.4 ms later at H1
つまり先にLivingstonに入射してから、約6.9ミリ秒後にH1に入射したと・・・
じゃあこの時間だけずらして、重ねて書いてみる

さらに、重力波が来たとされる時刻 GPS=1126259462 にも印をつけてみる
こんな感じ
time_shifted_t6.9e-3


よくわからないので、ズームしてみる
time_shifted_t6.9e-3_zoom


このデータの中に重力波があるらしいが、重力波信号は雑音信号に埋もれていて見えない・・・

このページ、
Data release for event GW150914 のFIG3を見てもらうとわかるように、いろんなピークが見える
これらは電源やレーザー干渉計の鏡を吊るすことに起因するノイズ(ラインノイズ、他にもたくさんの由来がある)で、
このデータはこれらのノイズがdominantになってしまっている・・・・

重力波信号が入っていないわけではないよ?
ラインノイズというのはある中心周波数をもったsin波、みたいなもなので、つまり周波数領域で見ると1本のピーク見える
今回の重力波信号は、検出器の感度が良い周波数よりもさらに低周波(10Hzよりもっと低い)からISCO(Inner Most Stable Circular Orbit)と呼ばれる周波数程度までの周波数成分をもっている
FIG 1の一番下のスペクトログラム、と呼ばれるグラフを見てもらうとそのことがよくわかる

このグラフは横軸時間 縦軸が周波数なので、
時間が経つに連れて重力波の周波数がどんどん上がっていっているのが見て取れる
その音が人の耳ではどのように聞こえるか? それはご自身で聞いてみてください!(GW150914ページの一番下からダウンロードできる)
こういう風に周波数が時間とともに上がっていくので、chirp(さえずり) signalと呼ばれている

話を戻して、
え、じゃあどのようにしてFIG1は作ったの?という疑問が出てくるがそれはcaptionに書いてある
For visualization, all time series are filtered with a 35–350 Hz band-pass filter to suppress large fluctuations outside the detectors’ most sensitive frequency band, and band-reject filters to remove the strong instrumental spectral lines seen in the Fig. 3 spectra.
つまり、まずデータに35Hz~350Hzのバンドパスフィルターをかける、これによって、重力波があまり含まれていない低周波成分と高周波数成分を落とす
次に、ラインノイズに汚染された周波数帯域を除去するフィルターをかける(notch filter?)
こういう処理をして、やっとFIG 1のように肉眼で重力波信号だけを見て取れるようなグラフになる・・・・

まぁ重力波信号は肉眼で見て探すわけではないので、例えこのように肉眼で見えなくてもご安心くださいw




ちなみに、この重力波は地球にいつ到来したかというと・・・
GW150914 イベントと呼ばれている通り、まず2015年9月14日らしい

さらに時刻はさっきのGPS時刻からわかる
GPS Time Converter
ここの下のボックスに 1126259462 と入力すると・・・・
GPS換算


UTCで、2015年9月14日 9:50:45 らしい
つまり日本時間(JST=UTC+9時間)では 2015年9月14日18:50:45
(ここ間違ってたので修正しました)

twilog で、その時間に自分が何をしていたか調べたみたら・・・
どうやらアニメ「ガッチャマン クラウズ」を見て、岩崎琢氏の作曲センスに感動していたらしい

へぇ〜

この記事の続きを読むに上記のグラフを描くためのスクリプトを添付しておきます
たぶん、txtファイルを解凍したあとに、コピペでグラフが描けるはず







メモ
set term png
set output "world.png"

set title "world.dat plotted with filledcurves"
set format x ""
set format y ""
set grid layerdefault linewidth 0.5
set object 1 rect from graph 0, 0 to graph 1, 1 behind fc rgb "#afffff" fillstyle solid 1.00 border -1
set xrange [ -180.000 : 180.000 ]
set yrange [ -70.0000 : 80.0000 ]
set lmargin 1
plot [-180:180][-90:90] 'world.dat' with filledcurve notitle fs solid 1.0 lc rgb 'dark-goldenrod'

world





gnuplotの公式demoに参考になりそうなものがあったのでこれをベースに作って行く
■ 参考 :gnuplot demo script: heatmaps.dem

これで書いたのがこんな感じ
heat map次にやりたいのは、このデータの横軸と縦軸の値を0~6とか意味のない数字じゃなくて、データの名前にしたい
# keynoteで手で修正するのは邪道派
# それに手間だし、あとあとデータを見たときに中身がすぐにわかるようにしておきたい


一応、こんな感じでOKなはず
set term png font "arial,11" fontscale 1.4
unset key
set nocbtics
set cblabel "Score"
set cbtics scale 0

set cbrange [0:1] noreverse nowriteback
set palette defined (0 "white", 1 "red")


set xrange[-0.5:6.5]
set yrange[-0.5:6.5]

set output "c11.png"
YTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' "hoge.txt" ' "
XTICS="`head -1 "hoge.txt"`"
set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )
set xtics rotate by -60
set ytics rotate by -60
set tmargin 3

plot "<awk '{$1=\"\"}1' 'hoge.txt' | sed '1 d'" matrix w image, '' \
matrix using 1:2:($3==0 ? " " : sprintf("%.4f",$3)) with labels
読み込むデータフォーマットは
ch1 ch2 ch3
ch1 0 2 3
ch2 4 5 6
ch3 7 8 9
みたいな感じ
set xtics rotate by -60
は以前やった、labelが長いので回転させている
そうすると、今度は上に突き抜けたので
set tmargin 3
で余白を広げた

■ 参考 : gnuplot Heatmap with label and score from different columns data


もう眠いので、画像はなしで・・・



# 2015/9/16 追記
一部の括弧が閉じていなかったので追記



# 2015/9/17 追記
あとで気づいたけど、グラフの縦軸のラベルがこのままだとなんか嫌

どうなっているかというと
e
d
c
b
a
 a b c d e
になっている
これだと、左下から右上に値が1になるラインがのびてしまう


これを
a
b
c
d
e
 a b c d e
みたいにしたいときは
set yrange[-0.5:6.5] reverse
または
set yrange[6.5:-0.5]
みたいにすればOK
どっちでも良いけど、自分は前者のほうが好み
この設定を外したいときはreverseを消すだけでいいし

けどそのときは
 a b c d e
a
b
c
d
e
にしたいんだよなぁ〜・・・・




# 2015/9/17 さらに追記

hoge.txtってデータのheat mapを書くスクリプトはこんなの・・・
heat mapの各四角の間を白い線をいれてみた
#!/bin/sh
output=hoge.txt
gnuplot <<EOF
set term png font "arial,11" fontscale 1.4
set output "hoge.png"

unset key
set nocbtics
set cblabel "match"
set cbtics scale 0

set cbrange [-1:1] noreverse nowriteback
set palette defined (-1 "blue", 0 "white",1 "red")

set xrange[-0.5:6.5]
set yrange[-0.5:6.5]
#set yrange[-0.5:6.5] reverse
#set yrange[6.5:-0.5]

YTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' "${output}"`"
XTICS="`head -1 "${output}"`"


set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )
set xtics rotate by -60
set ytics rotate by -60
set tmargin 3

set arrow 1 nohead front from -0.5,-0.5 to -0.5,6.5 lw 3 lc rgb "white"
set arrow 2 nohead front from 0.5,-0.5 to 0.5,6.5 lw 3 lc rgb "white"
set arrow 3 nohead front from 1.5,-0.5 to 1.5,6.5 lw 3 lc rgb "white"
set arrow 4 nohead front from 2.5,-0.5 to 2.5,6.5 lw 3 lc rgb "white"
set arrow 5 nohead front from 3.5,-0.5 to 3.5,6.5 lw 3 lc rgb "white"
set arrow 6 nohead front from 4.5,-0.5 to 4.5,6.5 lw 3 lc rgb "white"
set arrow 7 nohead front from 5.5,-0.5 to 5.5,6.5 lw 3 lc rgb "white"
set arrow 8 nohead front from 6.5,-0.5 to 6.5,6.5 lw 3 lc rgb "white"

set arrow 10 nohead front from -0.5,-0.5 to 6.5,-0.5 lw 3 lc rgb "white"
set arrow 11 nohead front from -0.5,0.5 to 6.5,0.5 lw 3 lc rgb "white"
set arrow 12 nohead front from -0.5,1.5 to 6.5,1.5 lw 3 lc rgb "white"
set arrow 13 nohead front from -0.5,2.5 to 6.5,2.5 lw 3 lc rgb "white"
set arrow 14 nohead front from -0.5,3.5 to 6.5,3.5 lw 3 lc rgb "white"
set arrow 15 nohead front from -0.5,4.5 to 6.5,4.5 lw 3 lc rgb "white"
set arrow 16 nohead front from -0.5,5.5 to 6.5,5.5 lw 3 lc rgb "white"
set arrow 17 nohead front from -0.5,6.5 to 6.5,6.5 lw 3 lc rgb "white"

plot "<awk '{\$1=\"\"}1' '${output}' | sed '1 d'" matrix w image, '' \
matrix using 1:2:(\$3==0 ? " " : sprintf("\%+-.2f",\$3)) with labels


EOF
データはこんなの
ch1 ch2 ch3 ch4 ch5 ch6 ch7
ch1 1.0000 0.8055 0.4939 -0.4707 -0.2836 -0.2430 -0.2348
ch2 0.8055 1.0000 0.7290 -0.4726 -0.3066 -0.2730 -0.2480
ch3 0.4939 0.7290 1.0000 -0.5452 -0.3945 0.3389 -0.3166
ch4 -0.4706 -0.4726 -0.5452 1.0000 0.6523 0.3800 0.2628
ch5 -0.2836 -0.3067 -0.3945 0.6523 1.0000 0.5164 0.2709
ch6 -0.2430 -0.2730 0.3389 0.3800 0.5164 1.0000 0.3927
ch7 -0.2348 -0.2480 -0.3166 0.2628 0.2709 0.3927 1.0000
heat map by gnuplot



一応こんなのもあるけど、このままではうまくいかなかった・・・
Gnuplot plot 2D matrix with image, want to draw borders for each cell






(2015/10/19 追記)
文字の色を白地にするのはどうすれば良いか?
plot "<awk '{\$1=\"\"}1' '${output}' | sed '1 d'" matrix w image, '' \
matrix using 1:2:(\$3==0 ? " " : sprintf("\%+-.4f",\$3)) with labels lc rgb "white"
みたいな感じでいけるかと思ったけど、変わらず
plot "<awk '{\$1=\"\"}1' '${output}' | sed '1 d'" matrix w image, '' \
matrix using 1:2:(\$3==0 ? " " : sprintf("\%+-.4f",\$3)) with labels textcolor rgb "white"
でOK

■ 参考 Set variable textcolor and point color with labels style in gnuplot









一応、4年前に書いた記事も参考になるかと・・・

■ 参考 : 【Gnuplot】pm3dの色合いを変えたい

(もう4年も経つのか・・・・ 人生の80年の中で4年はわりと重いな・・・どうでもいいけど)

set palette defined (0 "white", 0.5 "blue",1 "red")
とかでできるらしい

0がcolor barの下端、1が上端の値
この範囲外のデータがあったらどうなるのかは不明、無視されるだけか?
中間の色合いも指定できて、今回は0.5で青になるようなグラデーションになるはず


■ 参考 : How can I change the colors in a 3D figure ?







以前、グラフの任意の場所に直線を引く方法は書いた気がする

■ 参考 : 【gnuplot】軸に平行な直線を引きたい




まずは任意の場所に点を打つ方法
labelというのを活用する
set label 1 point pt 7 ps 3 lc rgb "light-red" at 6479, 1
みたいな感じでOK
labelのあとの通し番号を増やして行けば、点の数も増やせる
最後のat以降はそのまま(x, y)座標の値に相当する
"light-red"はデフォルトの色だったかは忘れた
なければ"red"とかにしておく

■ 参考 : グラフ上への任意の点のプロット





もう一つ、任意の場所に直線を描く方法
set arrow 1 nohead from 6789, -0.1 to 6789, 0.1 lw 1
これで(6789, -0.1)から(6789, 0.1)まで直線を引ける
またarrowの後の通し番号を増やせばいくつも書ける
lc 2とかで色を指定することも可能

■ 参考 : 任意の線を書く

nohead で矢印の先っぽを消している
矢印の形状の選択肢は次のページによくまとめられている

■ 参考 :矢印の描画と矢印のスタイル



こんな感じにできるはず
hoge



(2017/05/15 追記)

set arrowで矢印を書いてから、何かプロットをしたときグラフに表示される順番的にはarrowの方が下に来てしまう
そういうときは
set arrow 1 nohead from 6789, -0.1 to 6789, 0.1 lw 1 front
のようにfrontをつければOK

逆に背景に回り込ませたいときは、backを付ける

■ 参考 : Arrow


また、arrowにlabelを付ける機能はないため、
自分で
set label 1 "hoge" at 2, 0
のようにして付けないといけない
このとき、通し番号の1を忘れるとどんどん増えていくので注意

■ 参考 : How to add text to an arrow in GnuPlot





(2017/05/23 追記)

ここに追記すべきではないきがするんだけどここに書く
set label 1 "hoge" right at 2, 0
set label 1 "hoge" center at 2, 0
set label 1 "hoge" left at 2, 0
とleft / center / right と場所を3つ選べる
これは、labelの枠のleft / center / right を指定した場所に持っていくいくことに相当する
要するに右詰め、中央揃え、左詰め、みたいなものか

割と役に立つ


(クリックしてブログの収益化に貢献オナシャス)














■ 参考
Xtics

ドストレートなやり方があったのでメモ
An explicit tic mark has a third parameter, the "level". The default is level 0, a major tic. A level of 1 generates a minor tic. If the level is specified, then the label must also be supplied.

Examples:
set xtics ("low" 0, "medium" 50, "high" 100)
set xtics (1,2,4,8,16,32,64,128,256,512,1024)
set ytics ("bottom" 0, "" 10, "top" 20)
set ytics ("bottom" 0, "" 10 1, "top" 20)

この2番目がやりたかったこと。














実は以前、似たようなグラフを描いてみたことがある
あのときは日々の睡眠時間をプロットしてみたが、今回は家計簿
といっても、月々の電気代、ガス代、携帯代金だけ

と思って、過去の記事を見てみたがそんな記事がなかった・・・orz

少し関係あるかな?と思ったのはこれ
【雑記】Evernoteを使って日誌を書いています

ちなみにそのときに描いていたグラフはこんな感じ
1112

1年分くらいは描いたけど、途中で飽きてしまった・・・
一応毎日睡眠時間はEvernoteに記録はし続けてます




今回描いたグラフはこんな感じ
2014

2015

ソースコードは・・・
#!/bin/sh
if [ $# -eq 1 ]; then
#filename
FILE=$1
basename=${FILE##*/} # if other directry , get only filename
filename=${basename%.*} # remove extension
else
echo "usage : plot_money_book.sh [filename]"
exit
fi

year=`echo $1 | cut -c1-4`
#month=`echo $1 | cut -c3-4`
#echo "${year}"

#option select
TERMINAL="set terminal png
set output \"$filename.png\""
USELINE=
PLOTTYPE=
BW=0.3


gnuplot -persist <<EOF
${TERMINAL}
#set key below horizontal maxcols 4
#set key top left
set xlabel "month"
set ylabel "electricity, gas [JPY]"

set y2tics
set y2label "celephone [JPY]"
set title "${year} \'s money book"
set xtics 1
set xrange[0.8:12.2]
set yrange[0:]
set y2range[5000:]

set style fill solid border lc rgb "black"
set boxwidth ${BW}
plot "${FILE}" using (\$0+0):2 with boxes lw 2 lc rgb "orange-red" title "electricity",\
"${FILE}" using (\$0+${BW}):3 with boxes lw 2 lc rgb "light-green" title "gas",\
"${FILE}" using (\$0+${BW}*2):4 with boxes lw 2 lc rgb "light-cyan" title "cellphone" axes x1y2
EOF
open ${filename}.png
ファイル名は2015.txtとかにしておく

プロットするデータはこんな感じ
1列目は月
2~4列目にそれぞれの値
途中に#でコメントを書くこともできる
1 2952 1901 6173
2 1260 2110 10169
3 1125 1935 6173
4 1415 1741 6173
5 1336 1527 6173
6 905 1504 6173
7
8
9
10
11
12

ソースコード中でlc rgb "orange-red"や"light-green"などの名称が使われているが、これは以下のページを参考にして取り入れてみた
~/.gnuplot
に事前にcolor_listとcolor_list_16の部分を書いておくとgnuplot内でいつでも使えるようになるはず
■ 参考
gnuplotで使われている色名の一覧を作る

あと今回初めてy2軸を使ってみた
ガス代と電気代はy1軸(左の軸)で、携帯代金はy2軸(右の軸)を使っている







今朝知ったがgnuplotのグラフをそのままhtmlソースへの書き出しができる
set term canvas
set output "hoge.html"
plot sin(x) w l lw 2
出力されるのは画像ではなく、htmlソースなのでFinderとかでダブルクリックしたら
webブラウザを通して閲覧できるはず

スクショだけ貼っておきます
2015-07-04 19.22.27

何かに使えるかな〜と思ったのでメモ


ちなみにgnuplotの公式サイトのdemoもおそらくこの機能を使って書かれているっぽい。
Gnuplot Version 4.6 HTML5 canvas terminal
The canvas driver for gnuplot was contributed by Bruce Lueckenhoff, and extended by Ethan Merritt (sfeam). To view the results you need a browser that supports the HTML 5 'canvas' element.
という注意書きがあるので・・・




以前書いた気がしたが、どこに書いたか忘れたのでメモ
gnuplotでkeyの背景を透明にしたりするソースコードはこちら
reset
set term png
set key opaque box
set output "hoge1.png"
plot sin(x)title "six(x)" w l lw 2, cos(x) title "cos(x)" w l lw 2 lc 3

reset
set key noopaque
set output "hoge2.png"
plot sin(x)title "six(x)" w l lw 2, cos(x) title "cos(x)" w l lw 2 lc 3

reset
set key opaque
set output "hoge3.png"
plot sin(x)title "six(x)" w l lw 2, cos(x) title "cos(x)" w l lw 2 lc 3

q
set key opaque boxで
hoge1


set key noopaqueで
hoge2

set key opaqueで
hoge3






書いていて、どこに書いたか思い出した・・・
【gnuplot】png出力時にいろいろなフォントを使いたい






今までkeyはグラフの枠内に書いてきたが、実はグラフの枠外に書けることは以前記事にした
■ 参考
【gnuplot】おされなkeyを見つけた

今回やりたいことは、グラフのkey(legend)を1行に書く個数をこちらで指定して、見栄えを整えたいということ
文章にしてもわかりずらいので比較のグラフを見てもらった方が早いだろう・・・・





参考にしたのはこちら
3.24.30 key

重要なところを抜粋
Elements within the key are stacked according to ‘vertical‘ or ‘horizontal‘. In the case of ‘vertical‘, the key occupies as few columns as possible. That is, elements are aligned in a column until running out of vertical space at which point a new column is started. The vertical space may be limited using ’maxrows’. In the case of ‘horizontal‘, the key occupies as few rows as possible. The horizontal space may be limited using ’maxcols’.
要するに
 keyのオプションであるverticalを付けたとき、何個のkeyで改行するかはmaxrowsで指定する
 keyのオプションであるhorizontalを付けたとき、何個のkeyで改行するかはmaxcolsで指定する
ということらしい

これを使ってグラフを書くと・・・・・


デフォルトでは
枠内にkeyが表示される
pic_key_default


set key below horizontal maxcols 1では
縦にkeyを並べられる、maxcolsで折り返しの回数を指定するっぽい
pic_key_horizontal_maxcols1


set key below horizontal maxcols 2では
縦にkeyを並べられる、maxcols 2なので2個表示したら改行される
pic_key_horizontal_maxcols2


set key below horizontal maxcols 3では
縦にkeyを並べられる、maxcols 3なので3個表示したら改行される
pic_key_horizontal_maxcols3


set key below vertical maxrows 1では
横にkeyを並べられる、maxcols 1なのでずらっと横にならぶ
pic_key_vertical_maxrows1


set key below vertical maxrows 4では
pic_key_vertical_maxrows4

これらのグラフを書くためのソースコードは、


set term postscript enhanced color
set xtics pi
set format x "%.0P{/Symbol p}"

set output "pic_key_default.eps"
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"


set output "pic_key_vertical_maxrows1.eps"
set key below vertical maxrows 1
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"

set output "pic_key_vertical_maxrows4.eps"
set key below vertical maxrows 4
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"


set output "pic_key_horizontal_maxcols1.eps"
set key below horizontal maxcols 1
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"


set output "pic_key_horizontal_maxcols2.eps"
set key below horizontal maxcols 2
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"

set output "pic_key_horizontal_maxcols3.eps"
set key below horizontal maxcols 3
set xrange[0:2*pi]
plot sin(x) w l lw 3 title "sin(x)",\
sin(2*x) w l lw 3 title "sin(2x)",\
sin(3*x) w l lw 3 title "sin(3x)",\
sin(4*x) w l lw 3 title "sin(4x)",\
cos(x) w l lw 3 title "cos(x)",\
cos(2*x) w l lw 3 title "cos(2x)",\
cos(3*x) w l lw 3 title "cos(3x)",\
cos(4*x) w l lw 3 title "cos(4x)"

いつものpngではなくpostscriptを使っているのは、x軸の区切り文字をギリシャ文字のpiで綺麗に書きたいと思っていたのだが、pngにしたままだとエラーが出るから・・・
以前からめんどくさがって問題解決しようとしていないから放置している・・・
一応、情報があったので共有
■ 参考
gnuplot に関する情報やメモ (2007)

Unix user は png terminal でどうやって symbol を使うのでしょう」












欲を言えば、titleやlabelにギリシャ文字を使いたかったが、今回はうまくいかなかったのでパス
一応 eps または postscript出力ならギリシャ文字も出せるが、pngだと無理だった

本来は
set title "{/Symbol d}"
でいけるはず

自分の場合は次のようなエラーが出た↓
gdImageStringFT: No character set found while printing string d with font Symbol
そのうち解決したい






今回は書いたグラフをpng出力をするときに、titleやlabelの文字フォントをいろいろと変えてみたいという話
自分は基本的に Helvetica を使っている
他にもarielとか使えるはず

ではもっと他のフォントはどうやって使うのだろうか?
gnuplot png "font" list
とかでgoogle検索をしてみたが、パッとしたlistを表示する解決方法はわからなかった・・・

けど、Macに入っている任意のフォントを使う方法がわかった。
set term png font "/Library/Fonts/HelveticaCY.dfont, 11" fontscale 2.0 size 2400,600 enhanced
sizeとかfontscaleはなしでもOK

/Library/Fonts/以下にどのようなフォントがあるかは事前に調べておいたらいいだろう
font bookというアプリケーションを使うのも手か?

参考までに Times New Roman Italic で書いたグラフはこれ。

hoge

書き方は
set term png font "/Library/Fonts/Times\ New\ Roman\ Italic.ttf, 11" enhanced
set xlabel "x"
set ylabel "hoge"
set key opaque box
set output "hoge.png"
plot sin(x)title "six(x)" w l lw 2, cos(x) title "cos(x)" w l lw 2 lc 3
q
set key opaque box
↑これで右上のkey(legend)の下を白地で塗りつぶすことができる、黒線を消すことも可能





(2018/09/06 追記)

またこのトラブルに遭遇しました
とりあえず今の所解決方法はまだ見つかったないけど、関連記事を追記しとく

■ 参考 : SierraでSymbolフォントが表示できない

■ 参考 : How to add a greek character in png file created by gnuplot











set terminal pdf monochrome
でOK




ガンベル分布についての詳しい情報はwikiなどどうぞ↓

■ 参考
ガンベル分布(gumble) wiki



set term png
set output "pin_gumbel_pdf.png"

set title "gumbel pdf(a, b, x)=1/b*exp(-(x-a)/b)*exp(-exp(-(x-a)/b))"
set xlabel "x"
set xlabel "pdf(x)"
set xrange [-5:20]

f(a, b, x)=1/b*exp(-(x-a)/b)*exp(-exp(-(x-a)/b))
plot f(0.5, 2.0, x) w l lw 2 title "a=0.5, b=2.0"
replot f(1.0, 2.0, x) w l lw 2 title "a=1.0, b=2.0"
replot f(1.5, 3.0, x) w l lw 2 title "a=1.5, b=3.0"
replot f(3.0, 4.0, x) w l lw 2 title "a=3.0, b=4.0"
replot f(3.0, 6.0, x) w l lw 2 title "a=3.0, b=6.0"
set term png
set output "pin_gumbel_pdf.png"
replot
こんな感じのスクリプトを書いて
gnupot plot_gumble_pdf.plt
で次のようなグラフができるはず

pin_gumbel_pdf


次の記事でROOTでのグラフの書き方も説明予定







なんとなくやってみたくなって調べていたら、良さそうな方法が見つかったので・・・

こんなをgnuplotを使って作ります


reserge





まずはデータの準備。
そちらはいろんなところに良い記事がありますので、そちらを参考にどうぞ(なんて不親切な記事なんだ・・・)

リサジュー図形




データさえ生成できれば、あとは以下のようなスクリプトで1枚目の20枚のリザージュ曲線をまとめたようなグラフがパパっと描けます
#!/bin/sh

for((phase=0; phase<=180; phase+=45))
do
f1=10; f2=10;
gene_data ${f1} ${f2} ${phase} > ${f1}_${f2}_${phase}.txt
f1=10; f2=20;
gene_data ${f1} ${f2} ${phase} > ${f1}_${f2}_${phase}.txt
f1=10; f2=30;
gene_data ${f1} ${f2} ${phase} > ${f1}_${f2}_${phase}.txt
f1=20; f2=30;
gene_data ${f1} ${f2} ${phase} > ${f1}_${f2}_${phase}.txt

#echo ${phase}
done


TERMINAL="set terminal png"
#XLABEL="set xlabel\"x\""
#YLABEL="set ylabel\"y\""
OUTPUT=reserge.png
OPTION="w l lw 2 notitle"
gnuplot <<EOF
set terminal png size 1080, 720 fontscale 1.0
${XLABEL}
${YLABEL}
set size square
set output "${OUTPUT}"
set multiplot layout 4, 5


plot "10_10_0.txt" ${OPTION}
plot "10_10_45.txt" ${OPTION}
plot "10_10_90.txt" ${OPTION}
plot "10_10_135.txt" ${OPTION}
plot "10_10_180.txt" ${OPTION}

plot "10_20_0.txt" ${OPTION}
plot "10_20_45.txt" ${OPTION}
plot "10_20_90.txt" ${OPTION}
plot "10_20_135.txt" ${OPTION}
plot "10_20_180.txt" ${OPTION}

plot "10_30_0.txt" ${OPTION}
plot "10_30_45.txt" ${OPTION}
plot "10_30_90.txt" ${OPTION}
plot "10_30_135.txt" ${OPTION}
plot "10_30_180.txt" ${OPTION}

plot "20_30_0.txt" ${OPTION}
plot "20_30_45.txt" ${OPTION}
plot "20_30_90.txt" ${OPTION}
plot "20_30_135.txt" ${OPTION}
plot "20_30_180.txt" ${OPTION}


unset multiplot
EOF

rm ./*.txt



次はgifアニメの作り方
以前にも記事は書きましたが、今回新たに別の方法を知りました・・・

・以前の記事

【Gnuplot】のみを用いてgifアニメを作る

【gnuplot】gifアニメを作ってみた

・今回見つけた方法
gnuplotで1つのデータファイルからgifアニメを

要するに、グラフを書くためのデータに例えば100行毎に改行があれば
それを index 1 のようにしてその部分だけをグラフ化することができると・・・
(using の親戚らしい)

で、データをそのように作ってあげると・・・
set terminal gif animate nocrop font "arial,12" fontscale 2.0 animate delay 15 loop 0 size 1080,720
#set terminal gif animate
set output "hoge.gif"
nkmax=10
nk=0
while (nk < nkmax) {
plot [-1:1][-1:1] "${OUTPUT}" index nk w p pt 5 ps 1
nk=nk+1
}
のようにしてgifアニメを作ることができます

(完全に自分用のメモだなこれは・・・)










今までしらなかった・・・

こんな感じ
hoge





■ ソースコード
set key title "parameters"
set key below
set term png
set output "hoge.png"
plot sin(x) lw 2 title "sin", cos(x) title "cos" lw 2 lc 3



タイトルと関係ないけど、今回から画像を忍者ブログにアップロードするのをやめてflickerにアップロードしようかと思っている。
アップロード上限が1GBなのと、何かと一カ所にまとめておいた方が、便利だし・・・

方法は以下のリンクを参考にどうぞ
自分のFlickrの画像をブログに貼る方法。そして写真をいくつか載せてみる。


あと画像を線で加工ようにしました。
これは、画像の周辺色がこのブログの背景色と同じ白色だったときに、どこからが画像で、どこからが背景かわからないかなーとふと感じたので









プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST

print "先月子供が産まれました!"

# 最終更新 2022/10/25
カウンター
カウンター カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

flickr難民の写真置き場
(20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)

教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定
(阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)

英語論文執筆用の例文検索サービス
(とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)


Template "simple02" by Emile*Emilie
忍者ブログ [PR]