投稿

11月, 2018の投稿を表示しています

今日のお絵描き

イメージ
なんとなく絵を描きたくなったので2枚ほど描いてみました。Twitterの方にも投稿してあります。 1枚目は自分でも一体何を考えて描いたのか思い出せません🤔 2枚目のは今期の 某アニメ のキャラがOPで頭に付けていた花をモチーフに描いてみました🌼

Emacsのウィンドウの各要素の名称について

イメージ
Emacsのウィンドウ、いくつかの要素からなっていてそれぞれに名称があります。 これまでなんとなく覚えてる程度だったんですが、ここいらで簡単にまとめておくことにしましょう。 frame : ウィンドウ自体のこと、もしくはターミナル画面 menu bar : frameの一番上のメニューのこと tool bar : menu barの下のアイコンが並んでるところ window : tool barの下、bufferが表示されているところ scroll bar : windowの左右どちらかのサイドにあるスクロールバー mode line : windowの下のところ echo area : frameの一番下のところ もうちょい分かりやすいよう図で説明するとこんな感じ。 (字がきたないのと、綴りが間違ってる箇所は目をつぶっていただければと…) さて、frameは普通のアプリケーションではwindowと呼ぶわけですがEmacsではちょっと違った割り当てになっていてそこはちょっと迷いやすいかなと。まぁ実際にはEmacsではあまりwindowという名称は見かけないので、それほど気にすることはないかなと思います。

gnuplotでタイトルや軸ラベルを付けるとグラフ領域が小さくなってしまう件について

イメージ
gnuplotではコマンドでどういうグラフにしていくのかを設定していくので、割りと均一なものが作りやすいです。マウスでいろいろ編集出来るソフトと比較すると、始めは結構とっつきにくい感じはありますが、コマンドさえ把握していれば同じ形式のグラフがすぐに描けるのは利点となるでしょう。 設定によってグラフ領域の大きさが変わってしまう ただ、gnuplotで同じグラフを描いているつもりでも、微妙に違ったものが出来てしまうことがあります。 よくあるのが、グラフにタイトルを追加した場合。 例えば、これはタイトル無しでそのままプロットした場合のグラフ。  で次がタイトルを設定してプロットした場合のグラフ。 一見するとタイトルのあるなしだけで同じグラフに見えますが、重ねて表示すると次のようになります。 グラフの縦の幅が微妙に違っているのが分かりますね。 さらにタイトルだけでなく、x軸、y軸の軸ラベルも追加していくと、より違いが顕著になっていきます。 以下はxlabel, ylabel, x2label, y2label, titleを設定してグラフにしたもの。 先程と同様に何も設定していないグラフに重ねてみると となるわけです。ここまでになるとだいぶ違いがあるのが分かります。 一つだけグラフを描くだけならいいんですが、例えば2つのグラフを左右で並べて比較したい場合では、比較するモノ同士でグラフ領域が異なってしまっているとよろしくはないです。 なぜグラフ領域の大きさが変わってしまうのか? gnuplotではグラフ領域の大きさはmargin(マージン)の設定で変更することが出来ます。 で、デフォルトではこのmarginの値はcomputed automatically、つまり自動で計算され設定されるようになっています。なので、タイトルや軸ラベルを配置するとそれに合わせてmarginが設定され、グラフ領域の大きさも変わってきます。 (と、自分なりに解釈はしてますが、ドキュメントの読み逃しもあるかもなので詳しくはそちらを読んで下さい) なので、グラフ領域を決まった大きさにしたい場合はmarginを自動ではなく手動で設定することになります。 marginの設定 marginの設定はグラフ領域の上下左右の4つ。 lmarg

gnuplotで媒介変数表示(parametric)を使ってグラフを描く方法 (円や球、螺旋模様などに)

イメージ
関数のグラフを描く場合、普通はxの値に対応したyの値をプロットしていきます。 これとは異なる方法で、媒介変数表示( Wikipedia )という表し方があります。円のような曲線をグラフに描く場合の数式の表し方として便利とかなんとか。 媒介変数表示とは 少し説明してみると、ある変数tがあるとして、このtに対応して x = cos(t) y = sin(t) のようにxとyを決める関数がある、というようなものでしょうか。適当に図で説明するとこんな感じになるかと思います。 gnuplotで媒介変数表示をする方法 (set parametric) この媒介変数表示をgnuplotで使うには「set parametric」と設定します。これで二次元プロットでは「t」、三次元プロットでは「u, v」の変数を使って媒介変数表示が出来るようになります。三次元の方は2つ変数が使えるのですが、ちょっとイメージし難いですね…。三次元空間に球などを表現する場合に便利なようです。 変数のデフォルト値) またデフォルトではt, u, vの変数の値は[-5:5]となっているようです。 この値はそれぞれtrange、urange、vrangeを設定することで変更できます。 samplesの設定 あと円を描いてもややカクカクしたグラフになってしまう場合はsamplesの設定を見直すといいかと思います。 (参考 : gnuplotで関数プロットの形がおかしい場合 : samplesの値の設定について ) 実際の媒介変数表示のグラフの例 最後にちょっとしたグラフの例を載せておきます。 円を描く関数をちょっと手を加えて三次元に表すようにしています。 gnuplot> set parametric gnuplot> splot sin(u),cos(u),u w p もう少し手を加えてみましょう。 gnuplot> splot sin(v)/10,cos(v)/10,v w p, sin(v)/5,cos(v)/5,v w p pointtype 2, sin(v)/3,cos(v)/3,v w p, sin(v)/2, cos(v)/2,v w p, sin(v)/1.5, cos(v)/1.5,v w p

空模様(2018年11月18日〜11月24日)を映したタイムラプス動画

イメージ
2018年11月18日〜11月24日の空模様を映したタイムラプス動画を Youtubeにアップロードしています。 天気としては全体的に晴れが多かったです。そろそろ雪が降ってもおかしくない時期になってきました。 アップロードした動画は一週間分まとめたものになっています。 以下、Youtube動画内の各日付へのリンクと天気など情報になります。 11月18日 日曜日 曇りのち晴れ 11月19日 月曜日 曇り時々晴れ 11月20日 火曜日 曇りのち晴れ 11月21日 水曜日 おおむね晴れ 11月22日 木曜日 おおむね曇り 11月23日 金曜日 おおむね晴れ 11月24日 土曜日 晴れ時々曇り

Emacsですべてのテキストを選択する方法

イメージ
Emacsでテキストを書いてそのままコピーして別の場所に貼り付けたい場合に、すべてのテキストを少ない操作でコピー出来ると便利です。 選択操作をメニューから行う場合とキーバインドで行う方法 で、それをEmacsで行う方法は簡単で、メニューから[ Edit ]→[ Select All ]を選択してそれをクリップボードにコピーすればいいだけです。 キーバインドで選択操作を行うには「 C-x h 」とします。 なおGUIでEmacsを使う場合について説明しましたが、端末内でEmacsを使う場合もメニューは使えるので同様の操作が行えます。 端末でEmacsを使っている場合にメニューから選択する方法 端末でメニューを選択するには「 F10 」キーを押すことで行えるようになります。もし端末側でF10が使われていてEmacsの方にキーが渡されない場合は、「 M-x menu-bar-open 」とすればいいでしょう。 あとはGUIのときと同様に、「 Select All 」を選べばいいわけです。もちろんキーバインドの方を覚えているならそっちの方が手順が少なくて楽です。 その他の方法 カーソル移動とマーク操作を組み合わせれば以下のようにしても出来ますが、上で解説した方法を知っているなら特に使う機会はないかなと😉 bufferの先頭に移動する : M-< 先頭位置でマークする : C-Space マークした状態でbufferの最後に移動する : M-> 選択されたregionをコピーする : M-w Amazon Emacs関連書籍

空模様(2018年11月11日〜11月17日)を映したタイムラプス動画

イメージ
2018年11月11日〜11月17日の空模様を映したタイムラプス動画をYoutubeにアップロードしています。 天気としては全体的に晴れが多かったです。今年も結構寒くなってきました。窓に結露が出るようになってきたので、結露防止で網戸を被せるようにしています。 アップロードした動画は一週間分まとめたものになっています。 以下、Youtube動画内の各日付へのリンクと天気など情報になります。 11月11日 日曜日 おおむね晴れ 11月12日 月曜日 晴れのち曇り 11月13日 火曜日 曇り時々晴れ 11月14日 水曜日 曇り時々晴れ 11月15日 木曜日 晴れ時々曇り 11月16日 金曜日 晴れ時々曇り 11月17日 土曜日 曇り時々晴れ

Emacsのブックマーク機能について

イメージ
Emacsでよく編集するファイルをどこかに登録してすぐ開けるようにしておきたい場合はブックマーク機能を使うと管理するのに便利です。 (なお「最近開いたファイルを開く」という機能はこれとはまた別でRecentf modeというマイナーモードを有効とするよう設定するといいようです) メニューバーからアクセス ブックマーク機能にはEmacsのメニューバーからアクセス出来ます。 ファイルのブックマークへの登録方法 ファイルをブックマークに登録するには、ファイルをbufferに開いている状態で「Set Bookmark」を選択して行ないます。キーバインドで行うには「C-x r m」とします。なおブックマークにはファイルと開いているときのカーソルの位置も保存されます。ブックマークからファイルを開くと、そのカーソルの位置も復元されます。これがわずらわしい場合はブックマークに登録するときはカーソルをbufferの先頭に合わせておけばいいでしょう。 ブックマークに登録したファイルを開く 登録したファイルを開くには「Jump to Bookmark」を選ぶか「Edit Bookmark List」を選びます。 「Jump to Bookmark」を選択するとポップアップでブックマークに登録したファイル一覧が表示されると思います。キーバインドでは「C-x r b」ですが、この場合はミニバッファーでどのファイルを選択すると指定することになります。微妙に選び方が異なります。 「Edit Bookmark List」ではブックマークに登録されたファイル一覧がbufferに表示されるので、その中から開きたいファイルを選びます。キーバインドは「C-x r l」です。 ファイルのブックマークからの削除 ファイルをブックマークしておく必要が無くなったら「M-x bookmark-delete」でそのファイルのブックマークを消すことが出来ます。 その他にもブックマークに関する機能はありますが、とりあえず基本としてはこんなところでしょう。あとブックマーク自体は「.emacs.d/bookmarks」というファイルに保存されます。 実際のブックマーク機能を使ってみての感想ですが、ブックマークを呼び出すキーバインドをよく忘れてしまって結局あまり使わなくなっ

gnuplotの軸(axis)の設定 : zeroaxisで書いた軸に目盛りを描く

イメージ
以前のブログ記事でzeroaxisを設定することでグラフ中にx軸、y軸を描く方法を解説しました。 gnuplotの軸(axis)の設定 : x軸、y軸を描く その時作ったグラフは以下のようになっています。 ここで目盛りについて見てみると、グラフの枠に沿っては目盛りはあるのですがzeroaxisの設定で描かれた線には目盛りが描かれていません。 今回は、このzeroaxisで描いた線に目盛りを描く方法を解説していきます。 zeroaxisに目盛りを描く設定 zeroaxisでx軸、y軸を描く まず以前のブログ記事と同様にx軸とy軸を描きます。 gnuplot> set xzeroaxis linetype 1 linecolor "black" gnuplot> set yzeroaxis linetype 1 linecolor "black" xtics、yticsの設定により枠ではなく軸に目盛りを描くようにする 目盛りの設定に関しては主にxtics、yticsで行うことになります。設定項目は多いのですが、その中に目盛りを描く位置の指定項目があります。指定出来る場所は以下の2つ。 border axis デフォルトではborder、つまりグラフの枠に目盛りが描かれる設定になっています。なので、x軸に対して目盛りを描くためにはaxisに設定すればいいので gnuplot> set xtics axis とします。y軸に対しても同様に gnuplot> set ytics axis とします。ここまででグラフをプロットしてみると以下のようになります。 これだと目盛り間隔が広すぎてやや違和感があるので、以前のブログ記事で解説した小目盛りを描く設定により小目盛りを描き足します。 gnuplotの軸(axis)の設定 : 軸の小目盛りの設定(mxtics, mytics ...) gnuplot> set mxtics gnuplot> set mytics なお小目盛りの位置の設定は目盛り、つまりxtics、yticsの設定に従います(詳しくは以前のブログ記事参照)。 小目盛りを描くことであまり違和感無く見れるグラフになったかと思います。

EmacsのMinor mode(マイナーモード)についてもう少し詳しく

先日は以下のブログ記事にMajor mode(メジャーモード)について書いたので、今回はMinor mode(マイナーモード)について書いていきます。 EmacsのMajor modeについてもう少し詳しく と、「書いていきます」と言いましたが、こっちはあまり書く内容が無かったです…。 それでも一応書いていくと、Minor modeは、buffer内で機能するものと(ローカル)、Emacs全体で機能するもの(グローバル)に分かれるようです。 ローカルで機能するものとしてはauto-fill-modeや、abbrev-modeなどなど。テキストの編集に関するものが多いようです。 グローバルで機能するものとしては、scroll-bar-modeやカーソルの位置を表示するモードなどなど。こちらはEmacsの表示に関するものが多いようです。 あとはHooksという仕組みについて絡めればもう少し詳しく書けるかもですが😉 まぁモードの扱いに関しては基本の仕組みを抑えておく程度でいいのかなと。Emacsをカスタマイズしていく上ではどうしても仕組みの方を把握しておく必要になってくると思いますが、それはある程度使いこなせるようになってからでもいいかなと。

Déjà Dupのバックアップではバックアップ先をマウントしていないとダメっぽい?

Ubuntu 18.04 LTSを使うようになってから、どうもDéjà Dupのバックアップの挙動に「?」と思うことが🤔。 現時点で使っているDéjà Dupのバージョンは37.0。 で、いまの環境では、バックアップ先に2台目の内蔵HDDを指定しています。 Ubuntu 16.04 LTSのときと同じ構成で、そのときは初期設定を済ませれば後は特に意識せずにもバックアップが行われていました。ただ18.04 LTSに上げてからは、2台目の内蔵HDDをマウントしていないとバックアップ時にエラーが出るという挙動を示すようになりました。 エラーが出た後にマウントすればバックアップは行われるようになるので若干手間が増えた程度。ですが、なんとかなるならなった方がいいわけで…。 原因を考えるとしても、Déjà Dupの方を考える他に18.04 LTSでのディスク管理の方も考えないと分からなそうですね。ただシステム周りの方はあまり知識が無いのでちょっとこれ以上はなんともかんともわからないです😓。 launchpadの方を見たら同様の報告があったので、そのうちになんとかなるかもです。 あとは現時点で出来る対処としては、Ubuntu起動時に2台目の内蔵HDDもマウントされるようにしておくことくらいでしょうか。

EmacsのMajor modeについてもう少し詳しく

先日、以下のブログにEmacsのmodeについて簡単に書いたので、その続きでMajor modeについてもう少し詳しく書き足していきます。 EmacsのMajor modeとMinor modeの触りの部分 まずMajor modeはそれぞれにいろいろ機能が異なり、タブを押した時の挙動や独自のコマンドを持っている。 だいたいのMajor modeは以下の3つのグループに分類される。 テキスト (Text modeやHTMLなどマークアップ関連のmode) プログラミング (C, Python, Ruby, Lispなどのmode) その他、特殊なもの (Dired, Shell modeなど) もっとも基本的なMajor modeはFundamental mode。ただテキストファイルを開けばText modeになるので、これといってFundamental modeを使う機会はないかも知れない。いままで見た覚えもなかったし。 Major modeはbufferごとに設定される。そして、デフォルトでは開いたファイルの種類によりMajor modeの種類も設定される。もしそれとは違ったMajor modeを使いたい場合は、手動で別のMajor modeに切り替えればよい。 さて、modeを説明する上でHooksという仕組みについても触れておいた方がいいのだろうけど、あいにくとまだそれが何なのかよく分かっていないのでまた別の機会にまとめることにします🤔

gnuplotの軸(axis)の設定 : 軸の小目盛りの設定(mxtics, mytics ...)

イメージ
今回はgnuplotで軸の小目盛り(Minor tic marks)を設定する方法について説明していきます。設定項目としては以下の2つになります。 mxtics mytics 実際にはこの2つの他にmzticsや各軸の第二軸などの設定項目もありますが、今回はこの2つに絞って説明することにします。 目盛りの説明より先に小目盛りの説明をしますが、通常の目盛りはデフォルトで表示されているのでとりあえずそちらは後回しにしてまた別のブログ記事に書くことにします(忘れてなければ)。 小目盛りとは で、そもそも小目盛りとはなんぞや?というと、通常の目盛りの間にある小さな数字の付かない目盛りのことです。手書きの絵で説明するとこんなヤツのことです。 gnuplotではデフォルトの目盛りは以下のようになっています。目盛りだけで小目盛りは表示されません。 gnuplotで小目盛りを表示するには、明示的に表示することを指定する必要があります。 小目盛りを表示する方法 小目盛りを表示するための設定は以下のようになります。 gnuplot> set mxtics この設定では自動で小目盛りが割り当てられることになります。表示は以下のようになります。 なおここではx軸に対してのみ設定していますが、y軸に対しても設定するには gnuplot> set mytics とします。 少目盛りの表示間隔をカスタマイズする さて、小目盛りの表示間隔を自動ではなく任意の値で割り振りたい場合もあるでしょう。 この場合の設定方法は gnuplot> set mxtics 3 となるのですが、ここで与えた「3」という数字はx軸の値で3ずつ表示することを表してはいません。 ここで与えている「3」という数字は、通常の目盛りの間にいくつ間隔を割り当てるのかを示しています。つまり「3」を与えると、目盛りの間に3つ間隔が出来るよう小目盛りが割り当てられます。 このへんは割り当ての考え方の話になってくるんですが、以下の図のような割り当て方になってると考えればいいでしょう。目盛り間を3分割するように小目盛りの線が2つ配置されます。 gnuplotの表示で見ると以下のようになります。 なので5分割にしたい場合は gnuplot> set

EmacsのMajor modeとMinor modeの触りの部分

イメージ
Emacsについて基本部分をちょこちょこと調べているので、少しずつまとめていきます。ブログなのでとりあえず雑に書いてますが、ある程度まとまったらちゃんと書く予定。 今回は、EmacsのMajor modeとMinor modeについて。 2つのモードがあることを知っても具体的にどういう機能があってどう使っていけばいいか分からないと意味をなさないので、そのへんはまた次回に。 Major modeについて Major mode(メジャーモード)は排他的で1つのbufferに対して1つのMajor modeしか選択出来ない。もし他のMajor modeを使いたい場合は、その時使っているMajor modeから切り替えて使うことになる。 Minor modeについて Minor mode(マイナーモード)は互いに独立しているため、複数のMinor modeを同時に使用することも出来る。 異なるMajor modeの時のモードライン bashスクリプトファイルを編集しているときのモードライン 通常のテキストファイルを編集しているときのモードライン

物理の世界で使われる籠目(かごめ)という言葉

またちらほらと科学関係の記事を読んでいると、どこかで聞いたような単語が出てました。 Scientists create atomic scale, 2-D electronic kagome lattice 「kagome lattice」と出ていて、このkagomeというのは日本語の「カゴメ」ではないのかな?と思ったらそれで合ってました。😉 記事中にも「traditional Japanese woven bamboo pattern」と書かれてます。 では「カゴメ」とはなんぞや?というと、漢字で書くと「籠目」で竹で編んだ籠の模様のこと。 籠目 - Wikipedia 実際には籠の編み方はいくつもあるわけですが、物理の方でのカゴメは六角形と三角形で埋められる構造のことを指すようです。 カゴメ格子 - Wikipedia Trihexagonal tiling - Wikipedia 鉱物の構造にも見られるとかなんとか。 自分は記事で初めてそういう名前だというのを知ったんですが(形自体は馴染みはありましたが)、物理の方での用語自体は1951年に初めて使われたそうなので結構前から使われていたようです。検索してみるとカゴメ構造に関する研究はたくさんありました。 初めの記事の研究は原子レベルで2次元のカゴメ構造を作って、そこでの電子の振る舞いを調べたもののようです。また時間があるときにでも読んでみることにします。 Amazon 科学関連の書籍

Emacsのクリップボード機能が微妙に変わっていたというお話(Linuxの場合)

Emacsのドキュメントをちらほらと見てたら、クリップボードの使い方について書かれている部分がありました。 Clipboard - GNU Emacs Manual 個人的にはこれまで特に意識せずに普通のエディタと同じようにコピーアンドペーストしてたんですが(キーバインドは独特ですが)、こうしてドキュメントを読んでみると結構気付かされることが多いですね。 以前のEmacsだと(バージョン24以前?)、クリップボード機能はprimary selectionという機能で行っていたが、現在ではクリップボード機能で行うのがデフォルトだとかなんとか。 primary selectionっていうのは、LinuxというかX Window Systemで選択されたテキストをマウスの中クリックを使ってペーストするのに使われる機能ですね。これだとマウスの操作だけでコピーアンドペーストが出来るのであると便利な機能です。 さて、通常のアプリケーションだとコピーアンドペーストではコピーアンドペーストではクリップボード機能が用いられていて、prymary selectionはそれとは別個に存在する機能。思い返してみると、以前のEmacsだとコピーアンドペーストのやり方がなんか独特だったような覚えがあるのですが、もうあまりよく覚えてはいないです😉 Emacsで現在はコピーアンドペーストにクリップボード機能を使うといっても、当然ながらprimary selectionは別個に存在しているわけで併用して使うことは可能なわけです。 (最近ではシステムによってはデフォルトではprimary selectionは無効に設定されているなんて話はちらほら聞きますが、どうなっていきますかね?) またEmacsはごりごりとカスタマイズして使うソフトなので、この機能も以前のものに設定することも出来るようです。 Amazon Emacs関連書籍

タイムラプス動画作成で必要な基本的な計算について

イメージ
これまで結構タイムラプス動画を作ってYoutubeにアップして来ました。 で、タイムラプス動画を作る上で必要な計算がいくつかあります。カメラの設定やら動画編集ソフトの使い方などは話がややこしくなるので置いておくとして、今回は基本的な計算について簡単に紹介していきます。 撮影写真数の計算 タイムラプス動画では、基本的には数秒ごとに写真を撮影して、出来上がった数百枚、数千枚の写真ををつなげて動画にします。 では、何時間撮影すればいったい何枚の写真が出来上がるでしょうか? 計算するにあたり、まず始めに何秒置きに写真を撮影するか決めます。仮にこれを「t秒」としておきます。次に何分、何時間撮影するのかを決めます。これは分で表すとして「T分」としておきます。 そして実際の撮影コマ数はどうなるかと言うと、 撮影写真数 = 60 × T / t と表すことが出来ます。説明すると、60*Tで撮影総秒数を計算して、それを撮影間隔のt秒で割ることで計算しています。 Tが10分、tが5秒とすると 撮影写真数 = 60 × 10 / 5= 120 となり120枚の写真が撮影されることになります。これが3時間で、tが10秒だとした場合はTは3 × 60となるため 撮影写真数 = 60 × 3 × 60 / 10 =  1080 となり1080枚撮影されることになります。 ちなみに自分が作っている空模様のタイムラプス動画は3時30分〜21時までで15秒置きに撮影してるので、計算としては 撮影写真数 = 60 × (21 − 3 + 0.5) × 60 / 15 = 4440 で4440枚となります(実際にはその前後まで撮影してるので、これは必要最小枚数)。 ファイルサイズの計算 自分が使ってるのはあまり解像度の高くないWebカメラなので、ファイルサイズは1枚100〜200KBくらいです。それでも4000枚以上あるとあると600MBくらいにはなります。これが1回だけならいいんですが、毎日毎日続けていると年間で200GBは越えます。 コンデジだとだいたい1枚5MBほどですが、これが4000枚だと1回で20GBくらい。 一眼レフはちょっとファイルサイズが分からないですが、もっと大きくなるでしょう。 バックアップを考えるなら、一度動画で書き出した後は

gnuplotの軸(axis)の設定 : x軸、y軸を描く

イメージ
はじめに 今回はgnuplotでグラフ上にx軸とy軸を描く方法について解説していきます。 x軸とy軸を描く 初期設定のグラフ gnuplotで初期設定のまま y = x 2 + 1 のグラフを描くと という出力になるかと思います。 これを見ると、「グラフには普通あるんじゃないかなー?」と思うものが見当たりません。そう、ブログタイトルでネタバレしてますが、x軸とy軸が描かれていません。 フリーハンドで描きますが、グラフなら以下のようにx軸とy軸があるのが見やすいでしょう。 このプロットの場合は軸が合った方が放物線がx軸に接して無いことが分かりやすいですし。 x軸、y軸の設定方法 gnuplotでx軸、y軸を描く方法はいくつかあります。グラフ上の任意の場所に水平線を1本と垂直線を1本描けばいいわけですが(直交座標系の場合)、今回はgnuplotに用意されている機能(zeroaxis)を使って描くことにします。 zeroaxis gnuplotでx軸、y軸(とz軸)を描く機能に「zeroaxis」という機能があります。 gnuplot> help zeroaxis とすればこの機能のヘルプが表示されます。 zeroaxisの設定は xzeroaxis yzeroaxis zzeroaxis に分かれていて、それぞれの軸に対して個別に設定していく必要があります。 簡単な設定方法 簡単には gnuplot> set xzeroaxis とすればx軸が表示されるよう設定され gnuplot> set yzeroaxis とすればy軸も表示されるよう設定されます。どうもx軸、y軸とも一度に設定することは出来ないようですが、区切り記号(;)を使って gnuplot> set xzeroaxis; set yzeroaxis とすれば、一行に収めることも出来ます(個別にsetを使っていることに注意)。 デフォルトの軸の表示 さて、zeroaxisを設定して始めのグラフをプロットしてみると以下のようになります。これでちゃんとx軸、y軸が思った通りに表示することができました。 やはり軸があった方が放物線がどこを通るのかが分かりやすいです。 さ

gnuplotで角度を度またはラジアンに設定する方法

イメージ
gnuplotの角度の扱いについて gnuplotではデフォルトでは角度はラジアンとして扱われます。ただ角度と言えば度(°)で表す方が馴染みがある場合や、読み込みたいデータファイルのデータが度で角度を表している場合などもあるでしょう。また極座標プロットの場合は度の方が使いやすいかも知れません。そして、そのような場合にはanglesという設定を切り替えることで、ラジアンと度を切り替えることができます。 例外 角度の設定の例外として、hyperbolic(双曲線)関数、Bessel関数では角度が度、ラジアンのどちらの設定でもラジアンとして扱われるようです。詳しくはドキュメントを参照して下さい。 角度の設定方法 インタラクティブモードにおいて gnuplot> show angles とすると現在の角度の設定を確認出来ます。デフォルトでは「Angles are in radians」というようにラジアンになっていると表示されます。 これを度に設定したい場合は gnuplot> set angles degrees とします。またラジアンに戻す場合は gnuplot> set angles radians とします。 使用例 角度を度に設定して、x軸を0〜360°としてSin、Cos関数をプロットするには以下のようにします。 gnuplot> set angles degrees gnuplot> set xrange [0:360] gnuplot> plot sin(x), cos(x) その他、gnuplot関連のブログ記事 Amazon データ解析関連書籍など

RasMolという分子構造の可視化ソフトについて

イメージ
追記 どうも開発元のサイトがどこなのか追い切れてなかったようで、いま調べた範囲で少し修正しておきます。 分子構造を可視化するソフトとして結構前から使われていたものにRasMolというのがあります。 RasMol (現時点で最新版と思われる) RasMol and OpenRasMol (こちらがそもそもの公式サイトのようだけど、上のサイトに移ってるのかも?) RasMol - Wikipedia 分子でもタンパク質などの巨大分子の可視化が得意のようです。 ただ、最後のリリースが 2009年のバージョン2.7.5.1 2011年のバージョン2.7.5.2です。もう 10 7年近く更新されていないようですが、ソースコードのライセンスはGPLなので、何らかの形で続いていくかも知れないです。 (ソースコードのライセンスには経緯があるようで、バージョン2.7シリーズは2.7.3まではRalMolの独自ライセンスだったようです。) 自分もだいぶ前(2008年)にちょっと使ってみた動画をYoutubeにアップしてますが、結局それからほとんど使っていませんでした。 まぁ自分の用途としてこれまであまり分子を可視化する機会が無かったというだけですが。 更新が止まってるといっても、いまでもUbuntuのソフトウェアセンターにも登録されてるので興味があれば使ってみてはいかがでしょう。 せっかくなのでRasMol(2.7.5.2)をUbuntuにインストールして試してみました。結構軽快に動きますね。 (ただrasmol-classicの方を起動しようとしたらSegmentation faultとなってしまった…) Amazon 分子構造関連の書籍

空模様(2018年11月4日〜11月10日)を映したタイムラプス動画

イメージ
2018年11月4日〜11月10日の空模様を映したタイムラプス動画をYoutubeにアップロードしています。 11月7日は録画エラーのため、その日の動画はありません。 天気としては全体的に晴れが多かったですがやや変わりやすい天候でした。 アップロードした動画は一週間分まとめたものになっています。 以下、Youtube動画内の各日付へのリンクと天気など情報になります。 11月4日 日曜日 おおむね晴れ 11月5日 月曜日 おおむね晴れ 11月6日 火曜日 雨のち曇り(霧多い) 11月7日 水曜日 (録画エラーのため動画なし) 11月8日 木曜日 おおむね晴れ 11月9日 金曜日 曇り時々晴れ(一時雨) 11月10日 土曜日 おおむね曇り

研究の世界にある英語の壁(ニュース記事より)

Nature.comのニュース記事を読んでいると Scientists struggle with confusing journal guidelines というのが載っていました(2018年11月8日の記事)。 英語の論文誌への投稿に関する、100以上の国の7000人近い研究者を対象としたオンラインでの意識調査の解説みたいです。 なんでも英語を第一言語としない国の研究者は、英語の論文誌への投稿を大変に感じているとかなんとか。単に英語を読み書きするという話だけでなく、論文自体のあまり明文化されていない投稿のルールがその要因になっているとも。それと投稿後の査読などのやり取りなども。 まぁ言語以外に文化的な差異もあるんでしょうか?ニュース記事中の図を見ると、日本、韓国、中国で苦手意識が高いと出てます。ただ図にあるのは他にブラジルとインドだけなので、詳しく知るには大元の調査結果を見ないとわからないですね🤔 研究の世界はその中にいないとなかなか分からないことが多いのでしょうけど、研究だけではなく言語の壁があったりと結構大変そうです。 関連記事に以下のような記事(2008年のものですが)があったので、これを読めば何かしらの背景みたいのはつかめるかもです。 Language: The language barrier : Nature News 時間があるときにでも読んで見ることにしましょう😉 Amazon 英語関係の書籍

量子領域において電子でフラクタル図形を作るという研究

イメージ
ちらほらと科学関係のニュースをみていたら何やらおもしろそうな話が出てました。 Physicists build fractal shape out of electrons オランダのユトレヒト大学の研究者が行った研究で、なんでも量子領域で電子がフラクタル図形を形成するというもの。 実験自体は銅(Cu)表面に一酸化炭素分子(CO)を配置して、その時の表面の電子状態をSTM( 走査型トンネル顕微鏡 - Wikipedia )で観測しているようです。詳しくは上のニュース記事や論文を読んで下さい。 出来上がったフラクタルの形状はSierpiński triangleと呼ばれるもののようです。 一体どのようにしてこのような図形を作ることが出来たのかも興味ありますが、この状態の電子がどういう振る舞いを示すのかもおもしろそうですね。スケールサイズはナノスケールレベルでしょうけど、一体どのくらいの領域で形成されているのか気になります。 で、話は変わりますが、フラクタルと言えば最近自分でも少しいじって遊んでみてました。いくつかYoutubeのチャンネルに動画をアップしています。 fractalプレイリスト その中の一つに今回紹介した研究のフラクタル(Sierpiński triangle)で作った動画もありました。 自分でもまだフラクタルというものについて分かっていないことが多いですが、興味深い研究が出てくるともっと調べてみたくなりますね😉   Amazon フラクタル関係の書籍

gnuplotの日時データ扱いのフォーマット

始めに 以前のブログ記事でgnuplotでの日時データの基本の扱いを解説しました。 gnuplotでの日時データのプロットについて そこで gnuplot> set timefmt "%m/%d %H:%M" gnuplot> set format x "%H:%M" のように日時を扱うフォーマットを書いたので、今回はそのフォーマットの解説をしていきます。 なお、話としてはgnuplotのバージョン5.2についてなので、他のバージョンでは扱いが異なるかも知れません。またドキュメントやヘルプにはより詳しいフォーマットの取り扱いが書かれています。 日時フォーマット 日時フォーマットですが、データのインプット(set timefmt)の時に指定出来るものとグラフとしてアウトプット(set format)する時に指定出来るものは分かれているようです(とは言ってもインプットに指定出来ないものは少しだけで、だいたいは同じ指定が出来ます)。 インプット(set timefmt)のフォーマット データのインプットの時に指定出来るフォーマットは以下のようになっています。 %y : 年(0-99) (1969-2068の間のみ) %Y : 年(4桁) %m : 月(1-12) %d : 日付(1-31) %j : 年の日数 %H : 時(0-23) %M : 分(0-60) %S : 秒数(0-60) %s : 1970年(Unix epoch)からの秒数 %b : 月の短縮形(Novなど) %B : 月の名前(Novemberなど) タブは「\t」記号で認識されます。また日時に区切りが無い場合(16時20分を1620と書いてある場合など)では基本的に2桁ずつ値が読み込まれます(%d, %m, %y, %H, %M, %S)。 またスペースに関してはフォーマットに1つ書くと0個以上のスペースでも対応します。例えば「%M %S」というフォーマットにすると「1132」、「11 32」、「11    32」のいずれにも対応します。 インプット時の例 2014/04/26 : %Y/%m/%d 2018年11月14日 : %Y年%m月%d日 11:30:21 : %H:%M:%S アウ

gnuplotでの日時データのプロットについて

イメージ
日時データのグラフ 日時データのグラフとは gnuplotで描こうとしているグラフのデータファイルで、横軸(x軸)が単なる数字ではなく日時データの場合というのはよくあります。例えば、1時間毎に室温を測定してそれを24時間分まとめてグラフにしたいとか、毎日の体重を1年分グラフにしたいなど。 表計算ソフトとの違い 当然ながらgnuplotでもそのようなグラフを描くことが出来ます。ただし、日時データの取り扱いについては軸の設定や入力データのフォーマットなどを個別に設定する必要があります。表計算ソフトだとデータファイルを読み込むと自動で日時データとして解釈してくれるのであまり意識せずにグラフを描けますが、gnuplotではそうはなっていません。 そのため日時データはそれほど扱わない場合、gnuplotでいざグラフを描こうとすると日時の取り扱いについて調べるのが手間になったりします。それでも一度基本を押さえておくと後で楽になるので、ざっと説明していきます。 基本の設定 日付部分が以下のようなデータファイル(test01.dat)を仮定します。 1列目が「月/日」、2列目が「時:分」、3列目がその時刻の時のデータ値です。 11/12 15:21 10 11/12 16:11 13 11/12 16:46 7 11/12 17:01 14 そしてこれを1行目、2行目を日時として認識してプロットするには gnuplot> set xdata time gnuplot> set timefmt "%m/%d %H:%M" gnuplot> set format x "%H:%M" gnuplot> plot "test01.dat" using 1:3 with linespoints とします。これで出来るグラフは以下の通り。 さて基本的には日付データのを描くときはこのような設定になるのですが、これだけだと分かり難いのでもう少し詳しく1行ずつ解説していきましょう。 set xdata time 1行目の「set xdata time」はx軸で日時データを扱うという指定です。ここでは単にx軸では日時データを扱うという指定だけです。x軸ではなく、入力

MPV(動画再生ソフト)のハードウェアデコードと設定ファイルについて

始めに 今回はMPV(動画再生ソフト)の設定ファイルについての話になりますが、ハードウェアデコード絡みで起きたことも合わせて書いていきます。 MPVのハードウェアデコードについて(Ubuntu 18.04LTSの場合) 以前に以下のブログでも書いたMPVですが、 MPV(動画再生ソフト)のキーボード操作方法 どうもUbuntu 18.04 LTSのMPVではハードウェアデコードが始めから有効になっているようです。MPVのmanを読むとハードウェアデコードの設定(--hwdec)はデフォルトでは「no」とされているのですが、Ubuntuのリポジトリにあるmpvのソースを読むとハードウェアデコードを使うよう設定されていました。 (なおこれはaptでインストールするMPVの話で、snapパッケージにあるMPVについては調べてはいません) ハードウェアデコードでなぜ困るのか なおこの設定でもちゃんと再生出来ているのなら特に困らないのですが、自分の環境では以前使っていたスマホの動画ファイルだけ何故か再生できませんでした。他の動画ファイルは普通に再生出来ていたのでこれまで特に困らなかったのですが。 そして、MPVの起動オプションでハードウェアデコードを使わないよう設定したところ、そのスマホの動画ファイルも再生出来ました。このように問題のない方法が分かったのですが、毎回MPVの起動オプションを付けて実行するのはめんどうです。MPVは設定ファイルを使うことで起動する際の挙動をカスタマイズ出来るので、それを使って対処することにします。 MPVの設定ファイルの使い方 さて、Ubuntuではデフォルトのハードウェアデコードの設定が変わっているといっても、MPVのシステム側の設定ファイルでそう指定されているだけです。設定ファイル(mpv.conf)はMPVをインストールしたときにシステム内の以下の場所に置かれます(Ubuntuの場合)。 /etc/mpv/mpv.conf MPVを起動するときはここに書かれた設定が使われるというわけです。 そしてその設定を書き換えたい場合、このファイル自体はいじりません。設定ファイルを書き換えたい場合は、ホームディレクトリ以下の次の場所に新たにmpv.confという設定ファイルを作成して置いておきます。

gnuplotでテキストを扱う時のシングルクォート、ダブルクォートなどについて

イメージ
gnuplotに限らず、プログラミング言語ではテキストを扱う場合にはテキストをシングルクォートやダブルクォートで囲います。そして多くの場合、シングルクォートとダブルクォートでは機能がやや異なり、それはgnuplotでも同じです。 実際、gnuplotではどのような使われ方をするのか見てみることにします。 gnuplotで使えるクォートについて まずgnuplotで使えるクォートは3つあります。3つはそれぞれ シングルクォート ダブルクォート バッククォート ですが、最後のバッククォートについては機能が特殊なので最後に説明することにします。まずはシングルクォートとダブルクォートの違いについて見ていきます。 シングルクォートとダブルクォートの違い シングルクォートとダブルクォートで何が違うのかというと、制御文字の扱いが変わってきます。以下の2行の文章を例にすると Hello world! Today is a good day. これを1つのテキストで表すには改行を「\n」で表しダブルクォートを用いて "Hello world!\nToday is a good day." となります。 しかしこれをシングルクォートを用いて 'Hello world!\nToday is a good day.' とした場合は「\n」はバックスラッシュとnと文字通りに扱われて以下のようにそのまま出力されます。 さて制御文字の扱いの違いがあるのは分かったのですが、gnuplotではシングルクォートにおいてもすべてが文字として扱われない場合もあります。 次に説明するenhanced textを使う場合がそれです。 enhanced textの場合 enhanced textの解説はまた別の機会にするとして、簡単に説明すると  y = x 2 のようにテキストを上付きや下付きなどの装飾をするものです。出力端末の設定でこれを使うか使わないか指定出来るのですが、通常は使える場合は使う設定になるようです。 そして、シングルクォートを使う場合でもこのenhanced textの指定は有効となります。 (もちろんダブルクォートを使う場合でも) 単純なようでも話がややこしく感

化学の話 : ニンジン🥕を切ったらプラスチック製のまな板に色がこびりついてしまう

イメージ
ニンジン🥕をまな板の上で切ると、特に白いプラスチックのまな板ではニンジンのあのオレンジ色がこびりついてしまいやすいです。みじん切りに細かく切る場合はとくに色がこびりつきます。 このこびりついたニンジンの色は洗剤を付けたスポンジやタワシでごしごし擦ってもなかなか落ちませんが、これを簡単に落とす方法としては 漂白剤に浸ける 日光に晒す サラダ油を垂らして擦る などがあるようです。以前お酢で落ちるか試したことはありますが、そのときはほとんど落ちずに変わりがありませんでした。 さて、まな板の汚れを落とすライフハックはともかくとして、このしつこいニンジンによる色汚れの原因はなんぞや?というのを考えてみることにします。 まぁ検索すればβ-カロテンがニンジンを切った時の汚れの元ってのはすぐ分かりますね。ネットですぐ情報が得られる。便利な時代になったものです。ただそこで話を終わらせるのもつまらないので、ネットの情報などをひっくるめてもうちょっと深堀りして考えてみることにします。 ニンジン🥕とは そもそもニンジンとは何かというと、セリ科の植物でその根の部分が主に食用とされます。よくスーパーで売られているニンジンはオレンジ色のものが多いですが、その他に紫色や黄色のものがあったりもします。で、その根の色の成分がカロテンというわけです。 ちなみにオタネニンジン(別名として朝鮮人参、高麗人参、単に人参とも)もニンジンという名前が付いていますが、種としては別のもの。元々、人参という名はこちらのオタネニンジンの方に付けられていて、後から入ってきたニンジンは形が似ているからという理由で同じ名が使われたようです(区別のために後から入ってきた方はセリニンジンとも呼ばれる)。 なおセリニンジンも中国で改良が進んだ東洋ニンジン、ヨーロッパで改良が進んだ西洋ニンジンがあり、現在日本でよく目にするのは西洋ニンジンの方。日本に伝わったのは東洋ニンジンが16世紀頃、西洋ニンジンは江戸時代後期のようです。 一言にニンジンといってもこのようにいろいろ指すのですが、それだと話がややこしくなるので今回は目にしやすい西洋ニンジンのことをニンジンと表すことにします。 さて、ニンジンは野菜として重宝されてきました。そしてニンジンに含まれる栄養素がなんだとか色素がなんだとかが分かってき

最近の電子メールの文字コードについての雑感

何気なくThunderbirdで受信した電子メールの文字コード見てみたら、Unicodeのものがちらほらと。 そういえばiso-2022-jpという文字コードが日本語のメールでは一般的だったはずでは? と記憶してたけど、どうも現状ではそうとも言い切れない模様。システムによっては日本語はiso-2022-jpしか処理出来ないとか届いても読めないみたいなことはあるようだけど、すでに現状ではそういう環境はあまり無いみたい。古い型のガラケーあたりがそういうのに該当するみたいだけど、具体的にどれがそうなのかっていう情報も無いようなのでどこまで気にする必要があるのかと言われると判断が難しい。 試しにGMailをWebから書いて出してみたら、そのメールの文字コードはUnicodeになってました。その他にはメールマガジンではHTML形式のものはUnicodeのものが多い。 こういう状況だとiso-2022-jpとUnicodeが混在している状況が一般的と捉えた方がよさそうな気はする。 まぁ組織によっては決め打ちでiso-2022-jpで統一してるところもあるだろうけど、Unicodeで出すスタイルが普及してくると今後は状況も変わっていきそう。 しかし、最近では電子メールよりもSNSやメッセンジャーツールの方が使われることも多いわけで、電子メール自体の存続がどうなっていくのかも気になるところ。 Amazon 電子メール関連書籍など

gnuplotで疑似ファイル(pseudo-file)を使ったプロット方法 その1

イメージ
gnuplotではデータファイルをプロットすることが出来ますが、数式をプロットする際にデータファイルとしてプロットするにはどうすればいいでしょう? という話ですが、それなら何かしらのプログラミング言語などの数式処理でそういうデータファイルを出力してそれをgnuplotで読み込ませればいいわけですが、今回はそれとはちょっと違った話でgnuplotの機能にある疑似ファイルというものを使う方法について解説します。 疑似ファイル(pseudo-file)を使う方法 gnuplotのドキュメントではpseudo-fileとなっているので疑似ファイルと表しますが、個人的にはダミーファイルと言った方がニュアンスとしては分かりやすいです。まぁそれでもドキュメントの方に合わせて疑似ファイルと言うことにして話を進めます。 Special-filenamesについて まずgnuplotではデータファイルの特別な扱いとしていくつかのSpecial-filenamesというものが存在します。Special-filenamesには '' '-' '+' '++' があります。その中で'+'と'++'が疑似ファイルとして扱われるもので、今回は'+'を使ったプロット方法について解説していきます。 '++'は3次元プロットなどで使われるようで、また別の機会に解説したいと思います。 ''はplot1行で同じデータファイルを複数プロットする場合に、ファイル名の記述を2つ目以降は省略するために用いられます。 '-'はその場でデータを記述するモードに入るようですが、解説は長くなりそうなのでまた別の機会に 疑似ファイル'+'の簡単な使い方 疑似ファイルは形式的にはデータファイル扱いのため、プロットするときはusingオプションを使った記述となります。 例として、cos(x)を疑似ファイルでプロットする場合は gnuplot> plot '+' using ($1):(cos($1)) という記述になります。($1)はデータファイルの1列目を指定する記述です。

gnuplotで出力端末がどういったグラフィック出力をするのかテストする方法

イメージ
gnuplotは出力端末によって線のスタイルなど微妙に違っていたりします。そのため現在の出力端末がどのようなグラフィック出力となっているのか確認したい場合も出てきます。 実際に出力してみて、それから自分が思ったようになるよう調整していけばいいのですが、簡単に一括で出力する方法もあります。 方法は簡単でgnuplotのインタラクティブモードで「test」というコマンドを実行するだけです。 このように実行すると gnuplot> test 以下のような画面が表示されます(qt端末の場合)。 このように出力を見れば、線幅や点線の出力、塗りつぶし、フォントの扱いなどが分かるようになっています。 またカラーパレットのチェックには以下のコマンドを使います。 gnuplot> test palette 出力は以下のようになります。 さて、以上は画面出力が出来るqt端末で実行しましたが、ファイル出力の場合は当然ながら出力ファイルを指定してから実行する必要があります。pngを出力端末とした場合は gnuplot> set term png gnuplot> set output "test.png" gnuplot> test とすれば、test.pngファイルにtestコマンドの実行結果が出力されます。 その他、gnuplot関連のブログ記事 Amazon データ解析関連書籍など

空模様(2018年10月28日〜11月3日)を映したタイムラプス動画

イメージ
2018年10月28日〜11月3日の空模様を映したタイムラプス動画をYoutubeにアップロードしています。 天気としては全体的に晴れが多かったです。あと夜明け前の月が撮れた日もありました。 アップロードした動画は一週間分まとめたものになっています。 以下、Youtube動画内の各日付へのリンクと天気など情報になります。 10月28日 日曜日 おおむね晴れ 10月29日 月曜日 晴れ時々曇り 10月30日 火曜日 曇り時々晴れ 10月31日 水曜日 晴れ時々曇り 11月1日 木曜日 おおむね晴れ 11月2日 金曜日 おおむね晴れ 11月3日 土曜日 おおむね晴れ(朝のうち霧)

Pythonのrandom.choices関数について調べてみた話

イメージ
ふと思いついたアイデアをプログラミングで実装しようとあれこれ考えてました。で、今回はアイデア自体は置いておいて、そのプログラミングの基礎としての話になります。 あーでもないこーでもないと考えた結果、いくつか条件ごとに分かれた項目を作成、その条件の発生確率に従って選択すべき条件を決めるという線で行こうと思ったわけです。大元のアイデアとは切り分けて、話を単純化するために条件を a, b, c, d, e の5つで考えます。で、それぞれの発生確率を仮に 10%, 20%, 5%, 35%, 30% としておきます。この発生確率を元に、5つの条件のどれかを選ぶという処理になるわけです。 (発生確率は固定ではなくて経過に伴い変動していくよう作る予定ですが、ここでは固定して考えます) さて、アタマで考えるにそう難しくは無さそうと思えるのですが、いざプログラミングで処理を書こうとするとよく分からなくなりました。Pythonにはrandomモジュールに「random.choice」という関数があります。この関数は与えたシーケンス(リストとか)からランダムにシーケンス内の要素を返します。 「なるほど。この関数でいいじゃない」と思ったのですが、この関数で選ばれる要素はランダムで選ばれるだけなので確率がどうとかは考慮されません。5つの条件を与えればそれぞれ20%の確率で選ばれるだけ。これではダメです。 そして「ちょっとヒントもらうだけだからいいよね…」とここでインターネット上の知識に頼ることにしました。こういうのは自分で考えないとプログラミング能力が鍛えられないとかなんとか言いますが、使える知識を使うのもまたプログラミング能力…などと自分に言い訳をしつつ検索検索。 で、すぐに見つかったのはnumpyライブラリにある重み付けランダム選択関数。「なるほど、これを使えばすぐ出来そう」と思いましたが、ここでしばらく考えることにします。確かにこれなら使い方を把握すれば、すぐにプログラミングを組めるようになりそうです。しかし、そうは言ってもやはり少しは自分で考えた方がいいだろう、というさっきの言い訳に抗う気持ちもあるわけです。 ということで、ここでしばらく自分で考えてみることに。 まずランダムに選択する方法としては、始めに調べたrandom.choiceを使う

PythonのPIL(Pillow)で文字出力をして遊んでみました

イメージ
以前のブログでPythonのPIL(Pillow)で画像解析やってみたりしてました。 PIL(Pillow)による画像ファイルからの統計情報取得、処理時間が短くできました PIL(Python Imaging Library)ってのを使おうと思ったんですけども それはさておき、せっかく画像処理ライブラリを使えるようになったので、少しばかり遊んでみることにしました。 とりあえず出来たのが以下の動画です(Pythonで行ったのは画像出力までで、動画にするのはffmpegを使ってます)。円周率の数字を延々と流れるように出力しています。 処理としては1文字ずつ座標計算して出力する位置を決めています。今回は一度に5つ文字を出力させました。せっかくなので文字色もグラデーションになるようにそれぞれ変えてみました。座標計算で画面端まで行ったときの処理をどうすればいいか若干悩みましたが、座標計算用の関数を作ることで対処出来ました。 あと、この動画では数字を出力してるだけですが、日本語を扱おうとしたらどうにも出力されずに困りました。それに関してはPILのフォントを扱う関数の扱いをちゃんと読んでいなかったのが原因。truetypeフォントを指定してるのに、ビットマップフォント用の関数を使っちゃってたり、関数が適切でもフォントの指定で日本語を持たないものを指定しちゃってたり。 まぁなにはともあれ、一応カタチになるものが出来たので今回は満足です。 Amazon Python関連書籍など

gnuplotのplotでforループを使ったグラフプロット(plot for [i = ... )

イメージ
以前に書いたブログ gnuplotでアニメーショングラフの作成 : ループ処理の基礎 で「do for ...」を使ったループ処理について解説しました。そしてgnuplotにはこれとは異なるforループというものも使うことが出来ます。 (便宜上ループと言ってますが、ドキュメントの方ではイテレーションとなってます。意味としてはイテレーションの方が適切でしょう。ただうまく説明出来るだけの知識が無いのでループと言うことにします😔) forの書き方 このforの使い方は、書き方は基本的に以下のようになります。 plot for [i = 1:5] sin(x) * i そして結果は以下のグラフとなります。 これをforを使わないで表せば以下のようになります。 plot sin(x), sin(x)*2, sin(x)*3, sin(x)*4, sin(x)*5 forを使う場合と使わない場合を見比べれば、かなり書き方を簡略化出来ることが分かります。 書き方としてはplotのすぐ後ろにforの構文が入るので、なんでこれでループとなるのか?と面食らうかも知れませんが、まぁそういうものだと思って慣れるのがいいかと。 また、以下のように続けて使うことも出来ます。 plot for [i = 1:15] sin(x)*i, for [i=1:30] cos(x)*i なおiは1ずつしか増やせないかというとそうでもなく、 [i = 1:100:4] のように書けばiを4ずつ増やすことが出来ます。 (変数名はiである必要はないです) また変数の値を増やすだけでなく、いくつかのファイル名などをまとめて渡すというような使い方も出来ます。書式は [file in "001.dat 002.dat 003.dat"] のような書き方となります。こちらはデータプロットの際に役に立つでしょう。 forはここまでで説明したplot以外にもsetやunsetで使うことも出来るようです。 以上のようにforは1つのキャンバスに複数のグラフをまとめてプロットする場合に便利かと思います。 その他gnuplot関連のブログ記事 Amazon データ解析関連書籍など

Pythonのprint関数でendを指定した場合のループ処理で、sleep関数と合わせるとまとめて出力されてしまう件について

イメージ
Pythonでプログラミングしてこの動画のような出力になるようにしたのですが、そのときにややprint関数の動作が分からなかった点についてまとめておきます。 上の動画で何をしているのかというと、大雑把に言うと与えた文字列から1文字ずつ端末画面に出力するという処理をしています。基本の処理自体は単純で、1つの変数に全ての文章を収めて、それをループ処理で1文字ずつ出力しています。そして文章を流れるように出力するために、1文字出力するごとにコンマ数秒置くという処理をしています(timeモジュールのsleep関数を利用)。 さて、問題はそこのループ処理とコンマ数秒の処理待ちの部分。 まず、print関数で1文字出力すると改行も一緒にされてしまうので、改行を出力させないよう print(t1[i], end="") とendというオプションを与えています。 改行と一緒に出力する際は問題なかったのですが、endオプションを付けるとなぜか1文字ずつ出力がされず、しばらく待つと一度に全ての文字列が一緒に出力されてしまいました。 おそらくprint関数の出力がどこかしらにバッファされて、ループが終了したときに一度に吐き出されているようです。 で、あれこれ調べてみたのですが、print関数でその都度出力させるにはflushオプションを使えばいいということが分かりました。 簡単に書くと以下のようになります。 print(t1[i], end="", flush=True) こうすることで、想定通りの出力が出来るようになりました。めでたしめでたし。 Amazon Python関連書籍など

スポンサーリンク