投稿

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

gnuplot: 2軸プロット、2つの異なるY軸と共通のX軸を持つグラフを作成する

イメージ
共通のX軸を持ち、異なるY軸を持つようなグラフを描画する方法。例えば以下のようなグラフを作成する方法。

gnuplot: 日付あるいは日付時刻を解釈してもらう方法

方法 説明 時系列のデータの場合、日付あるいは日付と時刻がインデックスとして付与されているデータが存在する場合がある。そのようなデータをPlotする方法について。 方法 set timefmt によってデータに格納されている日付時刻のデータ形式を指定する。以下のコードは 2022-08-01 などといったタイプの日付の場合。時刻を含むデータも対応できる。 そのあと、X, Yの日付時刻データを使う軸を指定し、 time 形式のデータをPlotすると伝える。大抵の場合X軸。 set timefmt "%Y-%m-%d" set xdata time 説明 よく見かける日付時刻フォーマット文字列の形式でデータの読み出し方法を指定することによりGnuplotでも日付時刻を扱うことができる。 時刻を利用する場合には % の後に続く文字列が変わる程度で、基本的には同じ。詳しくは下記のマニュアルを参照のこと。 あるいは、gnuplot上で help timefmt とやることで見ることもできる。 参考サイト: http://gnuplot.sourceforge.net/docs_4.2/node274.html

gnuplot; 面倒な設定をデフォルトでやってくれるようにするgnuplotrc (初期設定ファイル)

方法 説明 Gnuplotで毎回実施して起きた設定がある場合、 gnuplotrc というファイルを用いると楽。 方法 gnuplotrc の置き場所を探す。 show loadpath Windowsで例えば以下のような表示が出る。 gnuplotrc は share というフォルダにある、つまり "C:\Program Files\gnuplot\share" に存在している。 loadpath is loadpath from GNUPLOT_LIB is "C:\Program Files\gnuplot\demo" "C:\Program Files\gnuplot\demo\games" "C:\Program Files\gnuplot\share" gnuplotrc is read from share 該当のディレクトリにう移動し、 gnuplotrc ファイルを弄る。中にはGnuplotで実行可能なコマンドを記述することができる。 説明 gnuplotrc は Bashにおける .bashrc のような、初期設定を記述できるファイル。 ほとんどの場合CSVデータを読み出す、という場合には CSVデータを読み出す設定 を記述したり、よく使う日付文字列形式があれば datefmt をこの中に記述してもよさそう。 マニュアルによれば、UNIXでは .gnuplot というファイル名で、Windowsでは GNUPLOT.INI というファイル名らしい。しかし上記の通り私のWindows環境では gnuplotrc というファイル名になっているようだ。インストール方式により異なる可能性がある。 参考サイト(HTMLがなさそうだったのでPDF): http://www.gnuplot.info/docs_5.4/gnuplot-ja.pdf

gnuplot: 最初の1行を飛ばして読み出す方法

方法 説明 CSVファイルなどでよくある、先頭行にヘッダが記述されたデータを読みだしてPlotする方法について説明。 方法 every ::1 を利用する。 plot "data.dat" every ::1 using 1:2 説明 Gnuplotにはデータを間引いてPlotする機能があり、それを利用している。 every ::1 で行われているのは「1番目の行から読みだしてください」という命令だ。Gnuplotで読みだすデータセットはC言語の配列のように0番目から始まるため、1番目の行=2行目ということになる。 この every は下記のマニュアルを見てもらえるとわかるが、結構細かい指定が可能。ここでは割愛する。 参考サイト: http://gnuplot.sourceforge.net/docs_4.2/node121.html

gnuplot: CSV, TSVデータを読み出す方法

方法 説明 方法 CSVの場合 set datafile separator "," TSVの場合 set datafile separator "\t" 説明 set datafile separator はその名の通りプロット対象のデータファイルのセパレータ、つまり区切り文字を指定するコマンドである。 Gnuplotではデフォルトのセパレータは空白文字(スペース)であるが、何かのデータを取ってくるとCSV形式になっていることが多いため、利用頻度が高め。 デフォルトでCSV形式を読み込ませるようにしたい場合には gnuplotrc を利用するのが良いと思われる。 参考サイト: http://gnuplot.sourceforge.net/docs_4.2/node173.html

gnuplot: ヒストグラムを作成する方法

イメージ
ヒストグラム(histogram)の作成は意外と面倒な場合が多いです。binのサイズやbinがいくつ存在するかなどから計算を実施して表示する必要があるためです。 gnuplotでは using の中で計算が実施できるというところを利用して、ヒストグラムを描画することができます。 どうすればいいか min , max , n やデータファイルの名称は適宜変更してください。 min = -5.0 # 左端 (ヒストグラムの最小値、最小binの左端) max = 5.0 # 右端 (ヒストグラムの最大値、最大binの右端) n = 20 # binをいくつにするか # 上述の値からbin幅を計算 width = (max- min)/n # 与えられた値がどのbinに属するかを計算する関数を定義 bin(x) = width*(floor((x - min)/width)+0.5) + min plot 'data.dat' using (bin($1)):(1.0) smooth frequency with boxes 説明 width まではそのまま代入と計算を実施しています。 bin(x) は若干複雑に見えますが、与えられた x が属するbinの中央の値を計算しており、ここで値がbinに丸め込まれています。 floor は切り捨てをする関数です。binが真ん中に来るように計算をしているため、 +0.5 という計算が入り込んでいます。 例えば 0 => x > 0.5 であれば 0.25 というような計算結果になります。 次に、最後の plot のあたりで実施している内容についてです。 gnuplotでは $1 や $2 などを利用して、データセットの各データを参照することができます。 $1 であれば1列目の各データ、 $2 であれば2列目の各データ … というように。 これにより、 using の後に来ている bin($1) ではデータセットの1列目の各行の値を bin(x) 関数に入れて計算していることになります。 また、 using においてカッコ () を用いることにより using の後の値は plot に利用するカラムの番号ではなく、実際にplotす...

gnuplot: スクリプトに引数を渡したい

イメージ
gnuplot では、スクリプトを読み出す機能があります。 gnuplot -c <filename> この機能を利用することによって、定型的な処理を簡単に実施することができます。例えばパラメータを変えて実験をした際のデータを処理するなど。 この時に、スクリプトに対して何かしらの引数 (パラメータ) を渡すことができればより便利です。そして、 gnuplot にはもともとその機能が備わっているのです。 -c オプションの引数を利用 -c の後にスクリプトファイルを指定しその後にスペース区切りで数値や文字列などを並べることでスクリプトの引数とすることができます。 gnuplot -c <filename> ARG0 ARG1 ... 具体的にどういうことか見ていきます。例えば以下のようなスクリプトファイルを用意します。 ファイル名を script.plg とします。 print "This script is ", ARG0 print "1st arg :", ARG1 print "2nd arg :", ARG2 そして、引数を渡して実行すると以下のようになります。 > gnuplot -c ./script.plg test1 test2 This script is ./script.plg 1st arg : test1 2nd arg : test2 ARG0 は実行対象のスクリプト名、 ARG1 以降の ARG* はコマンドラインで与えられた引数に対して順次割り振られていくわけですね。 こちらの機能を利用することで、plot対象のファイル名を変えて同じ形式のグラフを出したいときなどに引数を与えるだけで簡単に実施ができるようになります。 ちなみにこの命名方式は bash スクリプトの引数の命名方式 に似ています。 -e オプションで先回りして変数を定義 -c オプションでスクリプトを実行する前に -e を利用して変数を定義してしまう方法です。 -e オプションでは指定したgnuplotのコマンドを実行することができます。ダブルクオーテーションが必要です。 例えば以下のようにすればサイン波をすぐにPlot...

gnuplotで縦線を引きたい

イメージ
概要 gnuplotで描画するグラフにおいて縦線を引きたい。 以下のような感じ。 やり方は2通り やり方(1): 矢じりなし矢印 set arrow from x1, y2 to x2, y2 nohead を利用する やり方(2): with impulse によって特定のポイントへの縦線を描画する (こっちの方が楽かも) やり方(1): arrowによる方法 set arrow コマンドは矢印を描画可能です。 (x1,y1) から (x2,y2) への矢印を描画するには以下の様な命令をします。 set arrow from x1 , y1 to x2 , y2 そんでもって、矢じり部分を消すには nohead を利用します。 矢印から矢じり部分を消すと直線になります。 set arrow from x1 , y1 to x2 , y2 これを利用して、 (x1,y1), (x2,y2) をうまいこと設定すれば 縦線を引くことが可能ですね。 f ( x ) = x ** 2 set arrow from 5 , 0 to 5 , 25 nohead lt 3 plot f ( x ) これだけです。 因みに、 arrow を間違えてしまったなどで消したいときには show arrow で番号を確認して、 unset arrow <number> で消せます。 # ここで確認して show arrow # ここでその番号の arrow を消す unset arrow 1 やり方(2): with impulse による方法 (おすすめ) 座標を指定し、 with impulse によって縦方向の直線を描くことができます。こちらはやり方(1) に比べて終端のみ指定すればよいのが楽なポイント。 具体的には以下のようなコマンドになります。実際に利用する際には x y を直線を引きたい座標に置き換えてください。 plot "< echo x y" with impulse title "" # 極限まで省略すると以下でもOK ...

gnuplot: for文で回したときに凡例も併せて変更したい / 変数を文字列に埋め込みたい

イメージ
for で回した際に、その数値を文字列に入れ込んで凡例を合わせて更新したかった。 文字列の後に . (ドット) でつなげて変数を置けばいいらしい。 plot for [i = 0:5] i title "plot #".i これにより plot #0 から plot #5 という凡例を各グラフに指定することができる。 配列を利用して、事前定義ということも可能 array a[5] = ['hoge', 'moge', 'fuga', 'hoga', 'moga'] plot for [i = 1:5] i title "plot #".a[i]

gnuplot: グラフの色を変更する

イメージ
linetypeによる指定 linecolor + 色名による指定 任意の色を指定 linetype の番号によって指定する方法 gnuplotでは事前に定義されたlinetypeというものがあり、番号で指定することができます。これによりグラフの色を変更することが可能です。例えば: plot sin(x) linetype 2 # linetype を lt と省略して以下でも可能 plot sin(x) lt 2 ここで指定できる番号は show linetypes によって確認することができます。 gnuplot> show linetypes linetype 1, linecolor rgb "dark-violet" linewidth 1.000 dashtype solid pointtype 1 pointsize default linetype 2, linecolor rgb "#009e73" linewidth 1.000 dashtype solid pointtype 2 pointsize default linetype 3, linecolor rgb "#56b4e9" linewidth 1.000 dashtype solid pointtype 3 pointsize default linetype 4, linecolor rgb "#e69f00" linewidth 1.000 dashtype solid pointtype 4 pointsize default linetype 5, linecolor rgb "#f0e442" linewidth 1.000 dashtype solid pointtype 5 pointsize default linetype 6, linecolor rgb "#0072b2" linewidth 1.000 dashtype solid pointtype 6 pointsize default ...

画像付き: gnuplotをWindowsにインストールするまで

イメージ
 なぜか急に思い立って画像付きで記述してみる。 gnuplotの公式サイトのダウンロードページ に行きます。 以下の個所から、"Primary download site on SourceForge" をクリックします。 (一番上のリンク) 以下のような画面になるので、一番バージョンが最新のものを適当に選びましょう。 この画像だと 5.4.4 というところになります。 ちなみに、各リンクの右にあるグラフのようなものは1週間のダウンロード数を示しております。 何だかいっぱいファイルがありますが、 "gp544-win64-mingw.exe" というものがWindows向けのインストーラになります。 一番下にあるPDFファイルはgnuplotのマニュアルになりますので、興味があればダウンロードして読んでみてください(ただし英語)。 ダウンロード画面に移動します。画面中央上あたりにあるカウンタが 5秒 を数え終わるとダウンロードが自動的に開始されます。この画面では特に何もクリックする必要はありません。 5秒待たされるのはおそらく一気にダウンロードなどされないように負荷低減のため。 ダウンロードした .exe ファイルをダブルクリックし、インストーラを起動します。 画面に沿ってインストールをしていきます。 スクショをミスって画面が若干見切れていますが、ご容赦ください... 日本語を選択 (しなくてもいいけど) 使用許諾書に同意。これは必ず同意が必要です。 日本で普通に使う分には問題ないです。 Readme.txt という、そのソフトについての簡単な説明書の中身が表示されます。そんなに熟読しないでもOK。 インストール先の指定。デフォルトでは "C\Program Files\gnuplot" になります。特にポリシーがない方はデフォルトのままでOK。 何をインストールするかを聞かれます。デフォルトでも十分かと思います。そのままだとメニューなどすべてが英語になってしまうので、日本語にしたい方は "日本語対応" にチェック。 スタートメニューにショートカットを作成するかどうかを聞かれます。作っておいた方が後から探したりするとき楽。 そのほかの細かい処理を聞かれます。 ここで最下部にある ...

WSL1上でguplotを動作させようとした際に生じたQtのエラー

WSL1上でguplotを動作させようとした際に生じたQtのエラー WSLでgnuplotを使うために、適当に sudo apt install gnuplot-qt としてQt版のgnuplotをインストールした。 これでOKと思って動作させると以下のエラー。 > gnuplot gnuplot: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory なぜだか Qt のライブラリが見つけられないらしい。 こちらの記事 を参照すると、以下のコマンドで解消できるようだ。 sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 のところは環境やバージョンにより異なる可能性があるため、実行時に要確認。 本コマンドについてあまり説明が見受けられなかったので、少し調べた。本コマンドは対象のバイナリファイルの中身から一部を削除するコマンド。 バイナリファイルの形式はよく理解はしていないが、一般的に ELF (Executable and Linkable format) という形式で構成されており、実行プログラム本体とは別にある種のメタデータが格納されている箇所がある。このメタデータの .note.ABI-tag という個所を削除しているのがこのコマンドだ。実際のELF形式実行ファイルがどのような形式をしているかなどは Linux であれば readelf などのコマンドで見ることができる。 このセクションでどういったアーキテクチャのプラットフォームで動作できるかなど記述されているようだ。ここの記述がWSL1と相性が悪いらしい。( 参考 ) また、これとは別にX ServerをインストールしなければLinux側のGUIアプリは動作しないため注意。

Gnuplot でプロットの色をグラデーションで変えたい

イメージ
以下の2つについて解説します。 1つのデータをプロットする際に徐々に色が変化するグラフを描画 複数のグラフを描画する際に、それぞれの色を疑似グラデーション変化させる また、動作は Gnuplot 5.0 patch level 3 で確認しています。 1. 1つのデータをプロットする際に徐々に色が変化するグラフを描画 ¶ 1本の線をグラデーション 上図のような画像を描画する方法です。 plot "data.dat" u 2:3:1 w l lc palette plotするときに用いているusingコマンドに与える三つめの引数(?) がグラデーションに利用するインデックスになるようです。 linecolor (lc) コマンド後にある palette はいくつかの色が列挙されている配列のようなもので、 前述のインデックスによりこの palette の中の特定の色を選んでいます。 実際にプロットされる際には選んだ色の間を適当に補完した形でスムージングして綺麗なグラデーションで 表示してくれているようです。 上の例では単に palette と指定していますが、パレットの中身は set palette define コマンドによって 自分で指定することが可能です。 例えば、赤から青に徐々に変化するパレットを設定するには以下の通り。 set palette define (0 "red", 1 "blue") 上記のコマンドで利用する色の名前は show pallete コマンドにより確認可能です。 show palette colorname 因みに右に表示されるボックスが邪魔、という場合には以下のコマンドで消せます。 unset colorbox 参考ページ Using a palette as line color Multiple lines with different colors 2. 複数のグラフを描画する際に、それぞれの色を疑似グラデーション変化させる ¶ 複数の線をグラデーション いくつかのグラフをプロットする際に色を変化させる方法です。 こちらについては、素直にグラデーションにする方法が見つ...