!!!この記事の内容は古いです。 Cygwin上でMatplotlibをインストールする。 を参照してください。!!!
前回pipをインストールしたのはMatplotlibを使うためでした。 しかし、pip install matplotlibとするとビルド時にエラーを吐いて止まりました。
調べてみると、これはCygwin固有のバグのようで、既に報告されており次のバージョンでは直ると思います。
修正方法もわかっていたので、練習も兼ねてpatchを作成し動くようにしました。
以下に手順をまとめます。windows8+cyginw64とwindows7+cygwin64で動くのを確認済です。
cygwinのsetup-x86_64.exeから以下のパッケージをインストールします。
また、以下のurlからmatplotlib-1.3.1.tar.gzをダウンロードし、適当なディレクトリに展開します。
matplotlib(http://matplotlib.org/downloads.html)
単にpython setup.py installとすると、ビルドに失敗します。
matplotlib error while installing pyspeckit (http://stackoverflow.com/questions/18560249/matplotlib-error-while-installing-pyspeckit)
修正方法は_Cという名前の変数を出現箇所すべて_Co(なんでもいい)に変更するだけですが、練習としてpatchを作成しました。
--- ./lib/matplotlib/tri/_tri.cpp 2013-10-10 21:42:48.000000000 +0900
+++ ./lib/matplotlib/tri/_tri.cpp 2014-01-10 13:29:25.837581500 +0900
@@ -2177,13 +2177,13 @@
RandomNumberGenerator::RandomNumberGenerator(unsigned long seed)
- : _M(21870), _A(1291), _C(4621), _seed(seed % _M)
+ : _M(21870), _A(1291), _Co(4621), _seed(seed % _M)
{}
unsigned long
RandomNumberGenerator::operator()(unsigned long max_value)
{
- _seed = (_seed*_A + _C) % _M;
+ _seed = (_seed*_A + _Co) % _M;
return (_seed*max_value) / _M;
}
--- ./lib/matplotlib/tri/_tri.h 2013-10-10 21:42:48.000000000 +0900
+++ ./lib/matplotlib/tri/_tri.h 2014-01-10 13:25:46.188018200 +0900
@@ -818,7 +818,7 @@
unsigned long operator()(unsigned long max_value);
private:
- const unsigned long _M, _A, _C;
+ const unsigned long _M, _A, _Co;
unsigned long _seed;
};
上記パッチをコピペするか、下記urlからダウンロードして解凍し、matplotlib-1.3.1フォルダ直下に置きます。
gist(https://gist.github.com/iray-tno/3e3121cc26eb38e06530)
cygwinでmatplotlib-1.3.1フォルダ直下に移動し、以下のコマンドを実行します。
patch -p0 -d ./ < ./matplotlib-1.3.1_cygwin.patch
python setup.py install
これでビルドが成功したと思います。
公式のサンプルを実行してみます。
http://matplotlib.org/examples/mplot3d/lines3d_demo.html
startxwinとするとX Serverが起動し、ターミナルがひらきます。
そのターミナルの中で、python ./line3d_demo.pyとすると、新たにウィンドウが開き、プロットが表示されます。
Cygwin標準の端末(mintty)でXを使う方法は以下のurlを参考にしてください。
CygwinでX Windowを使う(http://keisanbutsuriya.blog.fc2.com/blog-entry-40.html)
簡単にまとめると