投稿

ラベル(gnuplot)が付いた投稿を表示しています

gnuplotの新バージョン、5.4がリリースされているようで

gnuplotの新バージョン、5.4が今年の7月にリリースされていました。 gnuplot homepage     その前のバージョンのもの(5.2.8)は去年の12月にリリースされています。それから約半年ちょっと。またUbuntu 20.04 LTSのリポジトリにあるgnuplotもこの5.2.8となっています。 現状においてこの新バージョンの5.4を早く試したい場合はソースコードからコンパイルするのがいいかと。 コンパイルはそれほどクセがあるものでも無いので、やり方さえ押さえているなら比較的簡単に行えると思います。  リリースノートを読んでみると、5.4の新機能としては Voxel grids追加など3Dプロット周りが強化されている印象を受けますね。このへんはコンパイルして実際に確かめてみる予定。 gnuplot.info/ReleaseNotes_5_4.html

gnuplot : ユーザー関数について

gnuplotで自分で定義出来るユーザー関数について gnuplotでは用意されている関数(sin(x)、exp(x)などなど)の他に自分で定義出来るユーザー関数を使用することが出来ます。 簡単なユーザー関数の定義は次のようになります。 f(x) = a*sin(x) このユーザー関数では変数aを用いているので、プロットするにはあらかじめaを変数として宣言しておく必要があります。宣言せずに関数をプロットしようとすると以下のようにエラーとなります。          undefined variable: a ユーザー関数定義の書式 ユーザー関数を定義するときの書式は例えば次のようになります。 関数名(変数1, 変数2, 変数3...) = 変数1 + 変数2 * 変数3 + ... 変数はx, yや自分で宣言する変数などになります。 ユーザー関数のプロット 定義した関数をプロットするときは(例:ユーザー関数f(x)をプロット) plot f(x) とします。 注意点としては、ユーザー関数の括弧を省略して"plot f"と記述してしまうとユーザー関数f(x)はプロットされません。これは何故かと言うと、"plot f"とした場合はユーザー関数f(x)ではなく、変数fとして扱われるためです。紛らわしいですがplotなどのコマンドにユーザー関数として認識させるには明確に関数として記述必要があります。 文字列関数として定義 ユーザー関数は数式に用いるもの以外に、文字列を生成するものも定義することが出来ます。 例えば以下のようにファイル名を生成する文字列関数を作ることも出来るわけです。 name(n) = sprintf("test%03.0f.dat",n) ユーザー関数ではいくつまで変数を使用出来る? ユーザー関数で使用出来る変数の数には制限があって12個までとなっています。 例えば以下の関数は変数が12個なので大丈夫ですが、 f(a,b,c,d,e,f,g,h,i,j,k,l) = a+b+c+d+e+f+g+h+i+j+k+l 次の関数は変数が13個なのでエラーとなるため無効とされます。 f(a,b,c,d,e,f,g,h,i,j,k,l,m) ...

Ubuntuのリポジトリからインストール出来るgnuplotのパッケージについて

この記事は今日現在(2019年12月26日)の Ubuntu 18.04.3 LTS gnuplot 5.2.2+dfsg1-2ubuntu1 での情報を元にしています。将来的にパッケージ構成が変わるかも知れないので、そのへん念頭に置いて読んで下さい。 Ubuntuのリポジトリにあるgnuplotパッケージの種類 Ubuntuでgnuplotを使おうとした場合、aptコマンドで簡単にインストール出来ます。今回はそれによってインストール出来るgnuplotのパッケージについて説明していきます。 (最新版や開発版、さらにカスタマイズしたい場合などはソースコードをダウンロードしてきて自分でビルドするのがいいでしょう) コマンドライン端末からapt searchでgnuplotを検索すると、直接gnuplotと関係あるパッケージとして以下のものが見つかります。 gnuplot gnuplot-qt gnuplot-x11 gnuplot-nox gnuplot-data gnuplot-doc このうち、一番上のgnuplotはメタパッケージとなっていて、このパッケージをインストールするとgnuplot-qtがインストールされます。またこのときgnuplot-dataも合わせてインストールされます(gnuplot-qtの依存関係により)。gnuplot-dataはgnuplot-x11、gnuplot-noxをインストールした場合にも合わせてインストールされるようになっています。 (gnuplotのメタパッケージをインストールするとgnuplot-qtがインストールされる書きましたが、そのとき使用しているUbuntuの環境によってはgnuplot-x11もしくはgnuplot-noxがインストールされるかも知れません) パッケージ毎の出力端末の違い 再びパッケージ一覧の説明に戻ります。以下の3つのパッケージはどれもgnuplotではあるのですが、それぞれ出力端末に違いがあります。 gnuplot-qt gnuplot-x11 gnuplot-nox パッケージ名を見て分かるように出力端末が"Qt"、"X11"、"Xサーバー無しの環境用"にと分かれてい...

gnuplotプロット例 : topコマンドの結果を取得してシステムモニターとしてプロット

イメージ
gnuplotでシステムモニターを作る 今回はgnuplotのlabels(ラベル)プロットを利用して、グラフ表示型式のシステムモニターを作ってみました。実用的に使えるかというと微妙でしかなくネタ的要素くらいなものですが、まぁモノは試しということで。 完成したもの イメージしやすいよう、始めに完成したものを以下にGIFアニメとして載せておきます。 gnuplotで作ったグラフ状システムモニター CPU負荷が高い順にプロセス名が並ぶ形で、Y軸の高さがCPU負荷を表しています。ここでは負荷が分かりやすいようyesコマンドを走らせています。なので、yesコマンドとそれを実行しているコマンドライン端末guakeの負荷が高くなっています。 また1秒につき1回CPU負荷データを取得してグラフを更新するようにしています。 ソースコード bind all "d" "break" set title "Press d key to stop the script" unset key set xrange [-1:] set yrange [0:200] while (1){ system "top -b -n 1 | head -n 17 | tail -n +7 > data01.dat" plot "data01.dat" using 0:9 with impulse lw 2 lc "black",\ "" using 0:9:12 with labels left rotate by 45 boxed offset 0,0.5 font ",10" pause 1 } 解説 topコマンドからシステム負荷を取得 元データとして、topコマンドからシステム負荷(CPU使用率)を取得したものを用います。topコマンドをバッチモード(-bオプション)でテキスト出力出来るようにして、1回だけ処理(-nオプション)をするようにします。 またこのままでは先頭行にプロットには不要な行があるので、headコマンドとtailコマンドと合わせて必要な部分だけ...

gnuplotの雑談小ネタ その1

gnuplotの雑談小ネタ gnuplotの解説記事を書いてましたが、そろそろ基本的なことは大抵書いたつもりです。まだ極座標プロットなど触れていないようなこともありますが、個人的にあまり使わない機能は自分でもよく分かっていないので、それらについてはちゃんと調べてから記事にしようかと思います。 で、今回この記事の話としては、これまで書いてきたこと、これから書いていくだろうことについて雑談的に触れていこうかと思います。あまり役に立つような内容でもないですが、読んでもらえると幸いです。 dgrid3dについて gnuplotの3次元プロットsplotでは、格子状のプロットを作る際はデータファイルをそれ用に作っておく必要があります。単にデータだけ3列用意してもそのままプロットすると、格子状ではなく1本の線で結ばれるだけになります。 で、dgrid3dという機能を使うと、それ用に作っていないデータファイルでもそのへんを補完計算して格子状プロットを作ることが出来ます。ただこの機能、使う分には手軽に使える反面、出来上がったプロットが何を表しているのかを読み取るのが難しい。元のデータにはない部分を補完して計算する都合上、作るプロットに正確性が必要ならどういった計算で補完しているのかを知っておく必要があります。 (あまり正確でなくともよい場合は、ある程度概略だけ押さえておけばいいと思いますが) dgrid3d自体、いくつかの補完計算が用意されていて、与えるパラメーターでどれを使うかを決めます。なので、この機能を記事にするとしたら、そのへんの解説を押さえてからになるでしょう。いつになるかわからないですが😊 linespointsで線と点で別々の色は使えるのか? pointsの色指定もlinecolor (lc) で指定するんですよね。そうするとプロットスタイルがlinespointsの場合、例えば lc "red" とすると線と点の両方が赤色になる。じゃあ点だけ青色にするにはどうすれば?という問題があります。一応、解決方法としては、linesプロットとそれと同じデータファイルでpointsプロットをしてそれぞれ別々の色指定をすればいいです。では1回の手順で済ませる方法はあるのでしょうか? PDFプロットでは1つのファイルにいくつもグラフを追加...

gnuplot : Pythonスクリプトにパラメーターを与えてプロット(sprintf)

イメージ
はじめに 前回の解説記事で、gnuplotからPythonスクリプトを呼び出し、その出力をPiped-dataでプロットする方法を取り上げました。 gnuplot : Piped-dataとPythonスクリプトを組み合わせたプロット(基本) このときは単に用意したデータをプロットするだけでしたが、今回はそこから発展してPythonスクリプトにパラメーター、つまり引数を与えてプロットする方法を解説します。これによりPythonスクリプトの出力結果をgnuplot側から操作することが可能となります。 Pythonスクリプトでパラメーターを与えてプロットする方法 準備 : Pythonスクリプトで引数を受け付けるようにする まず用いるPythonスクリプト自体を引数を受け付けるように作っておく必要があります。ここでPythonについて解説はしませんが、簡単に言うと"sysモジュール"の"argv"を用いて作ります。 例えば、"test01.py"というPythonのスクリプトファイルを以下のコード内容で作ります。 import sys a = sys.argv[1] print(a) このコードを実行するときに以下のように"1234"という引数を与えると、その引数が出力されます。 $ python3 test01.py 1234 argvはリストとなっていて、argv[0]にスクリプトファイル名、それ以降に引数が格納されます。 gnuplotから呼び出す方法 - その1: 直接Piped-dataのところに記述する gnuplotから引数を与えてPythonスクリプトを呼び出すとき、最も簡単には次のようにそのままPiped-dataのところに記述してしまえばよいです。 gnuplot> plot "< python3 test01.py 1234" with linespoints gnuplotから呼び出す方法 - その2:sprintfで引数を変数から読み込む ある変数、例えば"a = 321"を用意して、それを引数として用いることを考えます。gnuplotには文字列関数としてsp...

gnuplotプロット例 : デジタル時計

イメージ
gnuplotでデジタル時計を作る 時計を作る目的 時計を作るというのは、gnuplotのグラフを作るという用途とはほぼ関係がないです。ですが、作ることでgnuplotでの日時の扱いを把握し使いこなせるようになるのには役に立つかな思って作ってみることにしました。 完成したデジタル時計 まず始めに作った結果から示します(次のGIFアニメ)。 gnuplotで作ったデジタル時計 ソースコード ソースコードは以下の通り。 unset key set xrange [-10:10] set yrange [-2:2] while (1){ set label 1 strftime("%Y年%m月%d日 %H時%M分%S秒", time(1)+9*60*60) center at 0,0 font "SetoFont,25" plot sin(x)*0.1 - 0.5 lw 3 lc "green" pause 1 } 出力端末はQtを用いています。画像出力の出力(pngなど)では動作しません。 このソースコードを実行すると無限ループで動き続けるので、終了するときは端末でCtrl-zとして下さい。 (日時の取得はシステム側から取得しているので、このソースコードはもしかしたらOS依存があるかも知れません) ソースコードの解説 ソースコードの解説をすると、まず何かしらプロットしないとグラフが表示されないので、plotコマンドでsin関数をプロットしています。なのでここのplotコマンドは単にグラフを表示させるためだけのもの。 肝心の時計表示の部分は"label"を置くことで実現しました。ここでlabelに与える時計部分の文字列をstrftime関数で取得しています。この関数は与えられた秒数を指定されたフォーマットに従って出力します。 strftime("出力する日時フォーマット", 1970年1月1日0時00分00秒からの秒数) 今回は日付付きのデジタル時計を作るため、出力フォーマットは"%Y年%m月%d日 %H時%M分%S秒"としました(記号が何を意味するかについてはドキュメントを参照して...

gnuplotの勉強 : 日付&時刻の演算について

イメージ
gnuplotの日付や時刻の扱い、まだいまいち理解出来ていないので、いつもの解説記事ではなくて勉強している過程で分かった範囲を書いておきます。ちゃんとまとまったら解説記事としてまたまとめ直そうかと予定してます。 現時点ではちゃんとしたまとめではないため、この記事に書いてあることは内容の齟齬や思い違いが含まれるかも知れません。 gnuplotの日付と時刻の扱いのおさらい 日付と時刻の扱い、基本的なことは以前の解説記事に書きました。 gnuplotでの日時データのプロットについて 単に日付、時刻がデータとして含まれるデータファイルをプロットする分には、そこに書いた内容で対応出来るでしょう。今回考えていくのは、そのデータファイルの日付、時刻のデータに演算処理をしていくことについて。どういうことをしようとしてるのかは次で説明します。 演算処理が必要になる場面 演算処理が必要になる場面として、例えば以下の2つのデータを並べてプロットすることを考えます。 2018年の1年365日のデータ(書式 : 2018/07/21) その5年前の2013年の同様のデータ(書式 : 2013/07/21) ここでは以下のような簡単なダミーデータを作って試すことにします(Y軸の数値は適当にcos関数で作っています)。 2018年分のダミーデータ  同様にして2013年のデータも以下のように作っておきます(こっちのY軸はsin関数)。 2013年分のダミーデータ プロットするにあたり、1月1日から始まるように以下のようにgnuplotの設定を行いプロットしました。 set xdata time set timefmt "%Y/%m/%d" set format x "%m/%d" そしてプロット結果は以下のようになります。 異なる年のデータを並べてプロットしようとして失敗 プロット結果を見て分かるように、2つの年のデータが大きく離れてプロットされてしまいました。こうなってしまった原因は単純で、x軸の書式を"%m/%d"という書式にしていても開始は"01/01"ではなく"2013/01/01"から始まっているため。なので2018年のデー...

gnuplot : Piped-dataとPythonスクリプトを組み合わせたプロット(基本)

イメージ
はじめに 今後 「Piped-dataとPythonスクリプトを組み合わせたプロット」 というテーマで何本か解説記事を書いていく予定です。今回は始めということで、基本の部分について解説していきます。ここでやること自体はこれといっておもしろいものでは無いですが、仕組み上の基本ということに意味があります。 (テーマでPythonを扱っているのは、自分が一番扱いやすいプログラミング言語だからという理由です。他のプログラミング言語、コマンドなどでも応用可能です) Piped-dataについて gnuplotのPiped-dataについては以前の解説記事で説明しています。 gnuplotで他のコマンドからの出力結果をプロットする方法(Piped-data) 簡単におさらいすると gnuplot> plot "< 外部コマンド" として、外部コマンドの出力をデータファイルとしてプロットするという仕組み。 用いるPythonスクリプト 今回は基本の解説なので、Pythonスクリプトは単に与えられたデータを書き出すという単純なものを用います。Pythonスクリプトは以下に示すように、x, yのいくつかのデータをそのまま出力するというもの。 data01 = """\ 1 2 2 1 3 4 4 0 5 6 """ print(data01) これを"script01.py"というスクリプトファイルとして保存します。 ちなみにこの段階で実行すると以下のようにx, yのデータが出力されます。 $ python3 script01.py 1 2 2 1 3 4 4 0 5 6 PythonスクリプトをPiped-dataから呼び出す 用意したPythonスクリプト"script01.py"をgnuplotからPiped-dataを用いて呼び出してプロットします。ここでは特に難しくはなく、以下のgnuplotコマンドとなります。 gnuplot> plot "< python3 script01.py" with linespoints これで以下のグラフがプロット...

gnuplot : 線種や矢印などに適用するスタイルを作る(set style)

スタイル(set style)とは gnuplotではデータや関数のプロットの線種を gnuplot> plot "test01.dat" with lines linewidth 3 linecolor "red" のように "with ..." を用いて設定します。 そして、この方法とは異なり線種のスタイルを作って、それをプロット型式に適用するということも出来ます。前もってスタイルを作っておくことで、コードを書く時に読みやすく書けるようにもなるでしょう。 補足 後述しますが、スタイル機能は "set style ..." の書式で設定しますが、関数、線種、矢印など適用する要素によって設定する項目が変わってきます。また、適用するやり方にも違いがあることに注意して下さい。スタイル設定を統一的な方法だと思ってしまうと混乱する可能性があります。 スタイル適用の簡単な例 スタイルは "set style ..." で作ることが出来ます。例えばプロットの線種で線幅が5、線の色がグリーンのスタイルは以下のように作成します。 gnuplot> set style line 1 lw 5 lc "green" そしてこれをプロットの線種に適用するには gnuplot> plot "test01.dat" linestyle 1 とします。 スタイル設定の上書き  スタイル設定を適用と共に "with ..." 内などでそれと重複する設定を書くと設定が上書きされます。 スタイルを適用出来る要素 スタイルを設定、適用出来る要素は限られています。適用出来る要素としては主に以下のものがあります。 関数(function)、データ(data) line、arrow、textbox、histogramなど 関数(function)、データ(data) 関数(function) gnuplot> plot sin(x) のような関数プロットにスタイルを適用するには gnuplot> set style function dots とし...

gnuplot : splotでデータファイルをプロットする際に格子状ラインで結ぶようにする方法

イメージ
splotによる3次元プロット表示  gnuplotではplotコマンドによる2次元グラフ表示に加え、splotコマンドによる3次元グラフ表示が出来るのも大きなポイントです。 splot、関数プロットの例 splotでの格子状表示  関数プロットでは上のグラフのような格子状のラインで結ばれたグラフになるのですが、データファイルプロットの場合はデータの書き方が重要になってきます。このデータの書き方が結構失敗しやすく、データファイルプロットでうまく格子状にならない原因ともなります。  書き方に失敗すると例えば以下のようなグラフになります。x軸に対しては線で結ばれていますが、y軸は線で結ばれていません。 格子状表示にしようとして失敗した場合の例  今回は、格子状となるデータの書き方について簡単な範囲で説明していきます。説明では全てを扱うわけではないので、詳しくは公式のドキュメントやその他書籍、Webサイトなどを参考にして下さい。 データファイルで格子状表示にする書き方 書き方1. 数値1列のみでブロック分けをする  書き方の中でシンプルなものとして、以下のような数値1列のみで改行によりブロック分けする方法があります(なおブロックを分けるとき、改行を2つ以上にすると失敗します)。 2 3 1 5 6 3 1 4 2 5 2 4 1 5 2  この書き方を説明すると、 個々の数値はzの値 ブロック内の数値の個数がxの値(ここでは5つで0〜4) ブロックの個数がyの値(ここでは3つで0〜2) という扱いになります。 このデータファイルをsplotでプロットすると以下のグラフとなります。 書き方1. 数値1列ブロック分けのプロット 書き方自体はシンプルですが、xやyの値が明示されないため慣れるまでは直感的にやや分かり難い面もあります。また、この書き方では   各ブロックのデータの個数が一致している必要 があります。各ブロックで異なるデータ個数のファイルをプロットした場合は、格子状表示とはなりません。 書き方2. x,y,zの数値3列でブロック分けをする  次の書き方はx,y,z...

gnuplot : 線プロット(lines)で線がぐちゃぐちゃに結ばれてしまう場合の対処(Piped-dataを用いる)

イメージ
線プロットで線がぐちゃぐちゃに結ばれてしまう  gnupotでデータファイルを線プロット(lines, linespoints)するとき、線の結び方がぐちゃぐちゃになってしまうことが起こりえます。例えば、以下のようなグラフ。 線がぐちゃぐちゃに結ばれてしまう例 これはちゃんと結ばれていれば以下のグラフのようになるはずのものです。 通常の線プロットの例 なぜ線がぐちゃぐちゃに結ばれてしまうか  線プロットで線がぐちゃぐちゃになってしまうのは、データファイルのデータ並びが関係します。gnuplotでは線プロットの線の結び方はデータの並び順となります。データの数値の大きさではなく。 データの並び方と線の結び方の関係について  データの並び方、簡単な例で説明すると通常は以下のようになっているでしょう。 1    1 2    5 3    1 4    5 5    1 1列目がx軸、2列目がy軸のデータで、行が進むごとにx軸の大きさが小さい方から大きい方になるように並びます。これをプロットすると以下のようになります(分かりやすいようlinespointsでプロットしています)。 通常のデータ並びのグラフ例  この場合は特に問題はなく、通常通りの線プロットになります。では、次に同じデータを用いてデータの並びを以下のように適当に入れ替えてみます。 3    1 5    1 2    5 4    5 1    1  これをプロットすると以下のようになります。ぐちゃぐちゃに線が結ばれるのが見て取れます。 データ並びを入れ替えた場合のグラフ例  データ点数が少ないのでそれほどぐちゃぐちゃにはなっていませんが、これがもっとデータ点数が多くなると一番始めに説明したグラフのようになるわけです。また、このグラフを見て分かるように、x=3の次がx=5...

gnuplotプロット例 : 最小二乗法の可視化的説明

イメージ
データプロットを関数(ax + b)でフィッティング 始めに  最小二乗法を用いた数値解析によるフィッティングを可視化してみることにしました。 実験で得られた測定データ、表計算や解析ソフトでは簡単に近似曲線と関数が得ることが出来ます。こういうのは実際どういった処理で求めているのかを意識することは無いかも知れません。ただあまりブラックボックスな技術にばかり頼りっきりでもしょうがないので、ちょっと試しに可視化してみることにしました。 用いるデータ さて、用いたデータプロットは以下のようになっています。これを 関数 f(x) = ax + b でフィッティング、つまり最適解となる変数a, bを求めます。 用いるデータプロット ここでは最小二乗法については説明しませんが、手順としてはまず適当にaとbをそれぞれある値に決めます。そこで定まった関数とデータプロットの各点との差を求めます。ここで差は二乗してデータプロット全ての点のそれを合計します(便宜上sumと置く)。そうするとa, b, sumのワンセットが得られます。あとはこれをa, bの値をそれぞれ変化させて、どのパラメーターを取ればsumが最小となるかを求めてそれを解とします。 可視化してみる   解だけ求めるなら計算してsumが最小となる点を抽出すればいいのですが、その過程を可視化するためにもう少し準備をします。  まず計算により得られるデータセットは以下の3列からなります。 a1, b1, sum1 a2, b2, sum2 a3, b3, sum3 a4, b4, sum4 ︙ なので、aをx、bをy、sumをzとして三次元プロットをしてみます。計算過程を動画にすると以下のようになります(左側がデータプロットと関数の二次元プロット、右側が三次元プロット)。左側のグラフではデータプロットの各点と関数との差を矢印で図示するようにしています。 (Youtubeにアップロードした動画、処理にはPythonによるプログラミングも併用)  この動画では大雑把にaとbの範囲を設定して計算しているので、どこが最小なのかはいまいち分かり難くなっています。これは、データプロットから大きく外れたときのsumの値がかなり大きくなるの...

gnuplot : グラフウィンドウでのキーボード、マウス操作(set mouse)

イメージ
グラフウィンドウでのキーボード、マウス操作  gnuplotではQtやX11のようなウィンドウにグラフを出力する出力端末ではグラフ上でキーボード、マウスによる操作が可能です。マウス操作は以下の設定で行えるようになります。これはデフォルトでONになっているので、通常はそのままでマウス操作が行なえます。 gnuplot> set mouse この基本設定にオプションを付けることで操作のカスタマイズが行えるようになっています。今回は基本操作やカスタマイズについていくつか解説していきます。 操作状況を詳しく表示(verboseオプション)  以下のコマンドにより、グラフウィンドウ上でどのような操作をしたのかを実行端末に表示させることが出来ます。 gnuplot> set mouse verbose  デフォルトではこの設定はOFFになっていますが、始めのうちは有効にしておいた方がどんな操作をしているのか分かりやすいです。 (グラフウィンドウ上でキーボードの"6"キーを押しても設定を有効に出来ます) (このスクリーンショットでは"set mouse verbose labels"と"labels"オプションも付けていますが、こうすると後述するラベル追加も表示対象となります) 拡大(ズーム)操作  グラフの特定の範囲を拡大したいときは、拡大したい場所の端で右クリックを押し、カーソルを動かして範囲を決めて再度右クリックを押すとその範囲が拡大されます。  この他に拡大したい場所にマウスカーソルを合わせ、Ctrlキーを押しながらホイールボタンのホイール操作をすることでも拡大と縮小が行なえます。この操作の他に"+"、"="キーで拡大、"-"キーで縮小が行えます。  また、拡大したのを解除して元の表示範囲に戻す場合はグラフ上で"u"キーを押します。 座標のラベルを追加(ミドルクリック)  グラフ上でマウスのミドルボタン(ホイールボタン)をクリックすると、その位置の座標がグラフ上にラベルとして追加されます。  また以下のコマンドを実行しておくと、ラベルの追加の他に削除も行うことが出...

gnuplot : グラフにグリッド線を描く方法(set grid)

イメージ
gnuplotのグリッド線の描き方  gnuplotはデフォルトではグラフにグリッド線が描かれない設定になっています。ここではグリッド線を有効にする設定を解説していきます。 グリッド線の例 グリッド線の設定方法 簡単には以下のようにsetコマンドでグリッド線を有効に出来ます。 gnuplot> set grid グリッド線の線幅を変えたい場合は "linewidth" オプションの設定を追加します。 gnuplot> set grid linewidth 3 線の色を変えたい場合は "linecolor" オプションを追加。 gnuplot> set grid linecolor "dark-red" 点線ではなく実線にするには以下のようにします。 gnuplot> set grid linetype 1 linecolor 0 主目盛りだけでなく副目盛りにもグリッド線を設定する  ここまで解説した方法ではグリッド線は主目盛りにのみ設定されます。副目盛りにもグリッド線を描く場合、まず副目盛りを設定します。 副目盛りの設定 副目盛りを設定するにはx軸には gnuplot> set mxtics y軸には gnuplot> set mytics とします。 (副目盛りの数、間隔も別途設定出来ますが、今回はグリッド線の説明のためそれらの解説は省きます) 設定した副目盛りに対してグリッド線を設定 副目盛りの設定をしたなら次は副目盛りのグリッド線設定を行っていきます。 x軸、y軸に主目盛りに加えて副目盛りにもグリッド線を描くコマンドは以下のようになります。 gnuplot> set grid xtics mxtics gnuplot> set grid ytics mytics 副目盛りに個別に線の設定をするには、以下のようにカンマで区切って主目盛りと副目盛りのそれぞれの線の設定を行ないます。 gnuplot> set grid xtics mxtics linewidth 2, linewidth 1 グリッド線設定の確認方法 グリッド線がどのような設定になっているのか...

gnuplot : コマンドやオプションの省略した書き方

gnuplotでコマンドやオプションを省略した書き方  gnuplotではコマンドやオプションを省略して短く書くことが出来ます。例えば "plot" の場合は "p", "with" の場合は "w" などです。どこまで短く書けるかですが、他のコマンドやオプション名と被らないところまで短く出来るようです。また可能な限り短くする必要はなく、"plot" を例にすると p pl plo が同様に "plot" として実行されます。  省略した書き方はそれをそれとして分かっていれば、コマンドを書きやすくなります。また、コマンド文を短く出来るので何が省略されているのか分かってさえいれば読みやすくもなります。ただ、しばらくgnuplotを使わずに何の略か忘れてしまうことや、他の人にスクリプトファイルを渡して読んでもらう場合などを考えると、略さずにきっちり書いておいた方がいい場合もあります。個人的には後にスクリプトファイルとして残しておくようなコマンドは略さずにそのまま書いておくようにしています。 省略例  以下にいくつかの省略例を示しておきます。 コマンド plot → p splot → sp set → se title → tit xrange → xr yrange → yr clear → cl break → break cd → cd exit → ex help → h history → hi load → l pause → pa print → pr quit → q show → sh plot関連 with → w using → u プロットスタイル lines → l points → p linespoints → lp vectors → vec impulses → i steps → st boxes → boxes circles ...

gnuplot : ベクトルプロットでx, y座標にベクトルの中央を合わせてプロットする方法

イメージ
ベクトルプロットでのベクトルの始点の位置 gnuplotのベクトルプロットでのベクトルの始点の位置、データのx, y座標の位置に来ます。 例えばx, y座標が(1, 1)の以下のようなデータの場合、次のグラフのように(1, 1)がベクトルの始点になります。 1 1 1 0 始点がこの位置でいい場合はこれでいいわけですが、場合によっては指定したx, y座標にベクトルの中央が来て欲しい場合もあるでしょう。今回はその方法について解説していきます。  話としては以前の次の記事を下敷きにしています。   gnuplot : ベクトルプロットでのデータの扱い方について(vectors)  今回の話を読んでいて分かり難い場合、まずはこの記事を読んでみて下さい。 x, y座標にベクトルの中央を合わせる  x, y座標にベクトルの中央を合わせるには、ベクトルの始点、つまりx, y座標をずらす操作を行ないます。データ3列目のxdelta、4列目のydeltaはx, y座標とは関係なく、大きさの成分なのでこちらはこのまま用います。ベクトルの中央はxdeltaの1/2、ydeltaの1/2で表されるので、その分をx, y座標から差っ引いて始点をずらします。そうするとusingでは次のように指定すればいいわけです。 using ($1-$3/2.0):($2-$4/2.0):3:4 これでプロットすると以下のグラフとなります。 ベクトルの中央がx, y座標(1, 1)になっているのがわかります。 比較のため、始めのグラフと一緒にプロットすれば以下のようになります。 データがベクトルの大きさと角度の場合  データがxdelta, ydeltaではなくベクトルの大きさと角度の場合でも、変換してベクトルの始点の位置を算出してやれば同様に処理出来ます。 このへんは以前のベクトルの話と被るので詳しくは説明しませんが、usingの指定は次のようになります。 using ($1-($3*cos($4))/2.0):($2-($3*sin($4))/2.0):($3*cos($4)):($3*sin($4)) (角度がラジアンではなく度の場合は設定の変更が必要) (以前の記事 : gnuplot : ベクトルプロットで...

gnuplot : ベクトルプロットでのデータの扱い方について(vectors)

イメージ
ベクトルプロット(Vector plot)とは  gnuplotではvectorsというプロット形式でベクトルプロットを行うことが出来ます。要はある点におけるベクトルの大きさと方向を図示するというもの。 今回はベクトルプロットのプロット時のデータの指定方法について解説していきます。 (ベクトルプロットは3次元プロットでも使えますが、今回は2次元プロットの解説のみになります) ベクトルプロットの例  ベクトルプロットは以下のようなプロットになります。 プロットソースコード $data01 << EOD 0 0 0.4 0.4 0 1 0.1 -0.1 0 2 0.4 0.2 1 0 -0.3 -0.2 1 1 0.2 0.2 1 2 0.3 0.3 2 0 -0.4 0.1 2 1 -0.3 0.4 2 2 0.2 -0.3 3 0 0.3 0.2 3 1 0.4 -0.3 3 2 -0.4 -0.3 EOD unset key set grid set xrange [-0.5:3.5] set yrange [-0.5:2.5] plot $data01 with vectors lc 'red',\ '' with points lt 6 lc 'black' (EODというのはdatablocksというプロットファイルの書き方によるものです。詳しくは次の記事を参照して下さい : gnuplotで一つのファイルにデータとプロットコマンドを含める方法(datablocks) ) プロットデータの説明  ベクトルプロットでは、x, y座標の他にベクトルの大きさと向きを指定する必要があります。gnuplotのベクトルプロットでは、用いるデータは以下の4つの要素が必要になります。 x座標 y座標 xdelta : ベクトルのx方向の大きさ ydelta : ベクトルのy方向の大きさ このうちのxdeltaとydeltaによりベクトルの大きさと方向が決まることになります。 簡単に図で説明すると、次のような関係になっています。 usingを用いた指定 プロット時にはusingを用いて以下のように指定します。 gnuplot> p...

gnuplotプロット例 : 風速と風向きの時間変化

イメージ
とある日の東京の風速と風向き 東京のとある日(2019年6月1日)の風向きと風速からグラフを作ってみました。 データそのままではなく、風をベクトルとして扱い、風向きと風速を元に角度90°ごとに東西南北に要素を分けてグラフ化。こうすることで、どの時間帯でどちら寄りの風が強かったのかが分かるかなと思い作ってみました。 グラフを見ると午前中は北の成分が多く、午後からは南、東の成分が多いことが分かりました。 (実際、風に対してこのような分析が適してるのかまでは調べていないので、あくまでも個人的に参考にする程度のものですが) 用いたデータ 地点 : 東京都 東京 日時 : 2019年6月1日 データ : 風向・風速 (気象庁の「過去の気象データ・ダウンロード」からダウンロード) 気象庁 Japan Meteorological Agency 解析の仕方  データに関しては風向きが東西南北の16方位で格納されているので、まずそれを0〜360°の角度に変換(Pythonで変換用プログラムを作成)。角度を元に風速をかけ合わせ、それをsin,cos関数でx, y成分に分離。+yが北、-yが南、+xが東、-xが西となるよう振り分けて一時データファイルとして保存。それをgnuplotでグラフ化という手順で行ないました。 プロット形式はfilledcurveとvectorsを用いました。 gnuplot関連のブログ記事

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)

イメージ
gnuplotでのサイズ指定 gnuplotでプロットをpngなど画像として出力する際のサイズ指定は次のように行ないます。 gnuplot> set terminal pngcairo size 640, 480 出力端末(ここではpngcairo)の設定のときにサイズ指定も行うという型式です。 出力例 以下は 1280x960 640x480 320x240 の3つのサイズで出力したものです。 (別々に出力してGIMPで合成しています) プロットソースコード set term pngcairo size 1280, 960 font ",24" set output "1280x960.png" set title "size : 1280x960" plot sin(x) w l lw 5 lc "red" set term pngcairo size 640, 480 font ",12" set output "640x480.png" set title "size : 640x480" plot x**3 w l lw 3 lc "blue" set term pngcairo size 320, 240 font ",8" set output "320x240.png" set title "size : 320x240" plot 2**x w l lw 2 lc "green" 間違えやすい設定(set size)  gnuplotには上記とは異なる "set size"という設定があります。これは何かというと、プロット領域のサイズ指定に関する設定となっています。出力画像のサイズ設定ではありません。 (古いバージョンのgnuplotではこの "set size" で出力画像のサイズ設定を行っていたようです。また端末によってはまだ古い設定のままのものが残っているようです)  "set size...

スポンサーリンク