スキップしてメイン コンテンツに移動

gnuplotが使いたい! - BoWにGUIを導入

Bash on Windows (以下BoW) は事実上CUIのみのUbuntuなので, GUIアプリは使えない訳です. 大抵はそれで困らないけども, 科学計算の文脈では計算結果をgnuplotなりPythonなりでグラフにしたいので, フラストレーションが溜まります. それを解決する話.


1. とりあえずGUIを使えるようにする

1. VcXsrvをインストール: https://sourceforge.net/projects/vcxsrv/ からインストーラを落としてきて, いつも通り進めるだけです.

2. VcXsrvを起動 (いろいろ聞かれるかもしれませんがデフォルトでいいです)

3. BoWを起動して次のコマンドを実行

$ export DISPLAY=localhost:0.0


2. gnuplotでグラフ描画

以下の操作は上に続けて行ってください (BoWを再起動した場合は上の3をもう一度実行する必要があります. 第3節参照).

1. gnuplotをインストール

$ sudo apt install gnuplot5
※単なるgnuplotをインストールするとgnuplot 4.6が入りますが, gnuplot 5.0を使いましょう.

2. gnuplotを起動

$ gnuplot

3. グラフを描いてみる

> plot sin(x)

4. 念のため. gnuplotを抜けてbashに戻るには

> q
またはquitまたはexitを実行します.

5. デフォルトのターミナルをQtからwxtに変更する方法. まずgnuplotを起動した状態で

> show loadpath
を実行してgnuplotrcの場所を確認します. 私の場合, /usr/share/gnuplot5/gnuplot/5.0でした. そこで (gnuplotを抜けてから) このディレクトリに移動すると, gnuplotrcが見つかります.
$ cd /usr/share/gnuplot5/gnuplot/5.0
$ ls
gnuplotrc ... (他は省略しました)
そこで任意のエディタでこのファイルを開き, 任意の行 (最下段に加えるのがわかりやすいと思います) にset terminal wxtと書き足します. その際にsudoを用いて管理者としてエディタを起動しないと編集できません.


3. BoW起動時に自動的にGUIを使えるようにする

1. 既に指摘したように, 現状ではBoWを再起動すると毎回

$ export DISPLAY=localhost:0.0
を実行しないとGUIが使えません. これを回避して自動化するには, ~/.bashrcに
export DISPLAY=localhost:0.0
と書き足せばよいです.

2. Win10をシャットダウンするとVcXsrvも一緒に終了します. 従って次回Win10起動時には再びVcXsrvを起動する手間がかかります. これも回避できて, Win10のスタートアップにVcXsrvへのショートカットを登録しておけばよいのです. 具体的には, ディレクトリ

C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
にvcxsrv.exeへのショートカットを配置するだけです. VcXsrvインストール時にデスクトップやスタートメニューにショートカットを設置していたら, それをコピーするのが楽です.


参考文献

コメント

このブログの人気の投稿

matplotlib.histのnormedが変

以下の内容はPython 3.5.2 + matplotlib 1.5.1およびPython 3.6.2 + matplotlib 2.0.2で検証した. 作業日は2017年10月22日, 前者はUbuntu 16.04 on Win10 (WSL), 後者はDebian 8.9 (Anaconda). 規格化したいのにできない なにか数値の列 data があったとして, そのヒストグラムをmatplotlibでプロットしたいとする. 普通に plt.hist( data ) とすると, これは縦軸が各bin内に入るデータ点が何個あるかを表すことになる. これをデータ総数 len(data) で規格化したプロットにしようと思って plt.hist( data, normed=True ) または normed=1 とかやっちゃうと, 思った通りのアウトプットにならずに頭を傾げることになる. 例えば: import numpy as np import matplotlib.pyplot as plt data = np.random.normal(0,0.1,1000) weights = np.ones(len(data))/len(data) plt.hist( data, weights=weights ) plt.show() アウトプットは で, 縦軸が1を超えるとか, 意味がわからない. 原因 matplotlibのドキュメント を見ても何も書いてない. これは numpyのドキュメント に答えが書いてあるからで, 要するに normed オプションは事実上 density オプションと等しく, これは縦軸を確率分布関数と思って規格化するオプションである, と. 従って, normed=True オプションを指定すると, binの 面積 が1に規格化されることになる. いま欲しいものは値の 総和 が1に規格化されたアウトプットなのだから, binの幅が1でない限り, 欲しい結果は得られない. 対策 代わりに weights オプションを指定すればこの問題は解決できる. これは data の1つの値の重みを指定するパラメー

UbuntuのPDF編集ツールの使い方まとめ

PDFtkやpoppler-utilsに含まれるツールを使ってPDFを編集するコマンドのまとめです. 0. インストール sudo apt install pdftk sudo apt install poppler-utils UbuntuあるいはBash on Windowsならaptコマンドで一発. 1. PDFの文書情報の表示 pdfinfo (ファイル名) 2. PDFの分割と結合 pdftk (入力ファイル) cat (ページの指定) output (出力ファイル) ページ数の指定は1-12 14-endみたいな形で書けばよい. 入力ファイルを複数指定してページ数の指定を省略すればPDFの結合ができる. 3. PDFをJPEG/PNGに変換 pdftoppm [オプション] (入力ファイル名) (出力ファイル名の接頭辞) JPEGが欲しい場合-jpegを, PNGが欲しい場合-pngをオプションに指定する. デフォルトの解像度はDPI150で粗すぎるのでオプションで-r 300ないし-r 600を指定すべき. 白黒画像にしたい場合は-monoないし-grayを指定 (個人的には-grayのが好み). 複数ページのPDFを変換すると, 出力ファイルは (出力ファイル名の接頭辞)-1.jpg (出力ファイル名の接頭辞)-2.jpg みたいな形で生成される. 4. PDFからテキストを抽出 pdftotext (入力ファイル名) (出力ファイル名) 出力ファイルの文字コードはUTF-8, 改行コードはLF. 出力ファイル名は省略可能. 5. PDFから画像を抽出 pdfimages [オプション] (入力ファイル名) (出力ファイル名の接頭辞) オプションについて: -pngでPNG, -jでJPEG, -tiffでTIFF形式で出力される (オプションなしだとPPM形式) 6. PDFを回転 pdftk (入力ファイル名) cat 1-end(向き) output (出力ファイル名) 向きとしてはleft, right, downまたはnorth, east, west, southが使用可能. ※向きを指定する前にスペースを入れるとエラーになる. 関連ページ

源ノ明朝/源ノ角ゴシックをLuaLaTeXで使用する (Windows)

源ノ明朝 (Source Han Serif), 源ノ角ゴシック (Source Han Sans) はAdobeとGoogleが作成したCJKフォントで, オープンソースフォントとして公開されています (ライセンスはSIL Open Source License 1.1). 以下では, LuaTeXエンジンでこのフォントを (日本語で) 使用する方法を説明します. あるいは, otfファイルがダウンロードできれば, どのようなフォントにも適用可能です (PDFにフォント埋め込みすることに関してライセンスに注意が必要ですが). Windows10を前提としますが, 他の環境 (Linux/Mac) でもほぼ同じ方法で導入できるんじゃないでしょうか. 使用したのはTeX Live 2016 (LuaTeX-0.95) です.