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

gnuplotでデジタル時計を作る

時計を作る目的

時計を作るというのは、gnuplotのグラフを作るという用途とはほぼ関係がないです。ですが、作ることでgnuplotでの日時の扱いを把握し使いこなせるようになるのには役に立つかな思って作ってみることにしました。

完成したデジタル時計

まず始めに作った結果から示します(次のGIFアニメ)。

gnuplotで作ったデジタル時計
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秒"としました(記号が何を意味するかについてはドキュメントを参照して下さい)。
そして肝心の日時データの取得には、time関数を用いています。この関数はシステムの現時刻の値を返すもの。値は1970年1月1日0時00分00秒からの秒数として返されます。また関数を用いる際は何かしらの引数を与える必要があるため、ここではtime(1)としています(与える引数に関係なく現時刻の値が返ってくる)。どんな値が返ってくるか調べるときは
gnuplot> print time(1)
とすれば表示されます。
なお、 time(1)+9*60*60 としているのは日本標準時にするためです。
こうしてtime関数で取得した現時刻の値をstrftime関数でフォーマットに従った文字列として取得しているというわけです。

あとは連続的に時計表示を更新させるために、全体をwhileコマンドで無限ループさせています。最後のpause 1により、更新させるときに1秒の待ちを作ります。このpauseコマンドは別に無くてもいいのですが、これが無いと待ち無しでループされるため計算負荷が無駄に増大してしまいます。

なお出力フォントとしてSetoFontを指定しています。ここのフォント設定の書き方が分からない場合は font ",20" とすればデフォルトのフォントでフォントサイズだけ変えることが出来ます。

gnuplot関連のブログ記事

コメント

スポンサーリンク


このブログの人気の投稿

gnuplotでプロットなどの色をcolornameの指定で変更する

catコマンドの出力を行番号付きにするためのコマンドラインオプション(-n, -b)

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

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

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