雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2009-10-09


[python]matplotlib - backend MacOSX  [python]matplotlib - backend MacOSX - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  [python]matplotlib - backend MacOSX - 雲雀は高く空を舞い  [python]matplotlib - backend MacOSX - 雲雀は高く空を舞い のブックマークコメント

version .98.4でQuartz@Mac OS Xがバックエンドに加わったんだとか。wxよりも早いよ!とのこと。pythonでは十分にテストしたけどiPythonだとあまりテストしてない…けど原理的には動くはず!とのことだとか。

x1 = [x/1000.0*pi*2 for x in range(1000)]
y1 = sin(x1)
plot(x1, y1)

f:id:allegro:20091009231038p:image

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import pylab
import random
import numpy as np

fig = pylab.figure()
ax = Axes3D(fig)
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)

pylab.show()

f:id:allegro:20091009231037j:image

[]matplotlib - 設定ファイル matplotlibrc matplotlib - 設定ファイル matplotlibrc - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib - 設定ファイル matplotlibrc - 雲雀は高く空を舞い matplotlib - 設定ファイル matplotlibrc - 雲雀は高く空を舞い のブックマークコメント

設定はこちらをさんこうに.matplotlib/matplotlibrcを編集する

とりあえず、

interactive : False

#show()をしなくてもグラフが描画される

backend : TKAgg

# default backendをTKAggにする。ここにMacOSXっていう項目があるけどなんだろう…

だけ設定した。

[]matplotlib matplotlib - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib - 雲雀は高く空を舞い matplotlib - 雲雀は高く空を舞い のブックマークコメント

f:id:allegro:20091009214136p:image:w600

[]matplotlib backend (2) GTK, GTKcairo matplotlib backend (2) GTK, GTKcairo - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib backend (2) GTK, GTKcairo - 雲雀は高く空を舞い matplotlib backend (2) GTK, GTKcairo - 雲雀は高く空を舞い のブックマークコメント

なんか突然できたのでメモ。matplotlibのportfileを眺めていたらvariantなる記述を発見。これはなんぞやーと思ったら、portではvariantsによってインストールオプションを指定できます、とのこと。

71 variant cairo description "Enable Cairo backends" {

72 depends_lib-append port:py26-cairo

73 post-patch {

74 reinplace "s|MP_Cairo=False|MP_Cairo=True|" ${worksrcpath}/setupext.py

75 }

76 }

port variantsで指定できるオプションを見れる。

port variants py26-matplotlib

py26-matplotlib has the variants:

cairo: Enable Cairo backends

darwin_8: Platform variant, selected automatically

ghostscript: Enable GhostScript support

gtk2: Enable GTKAgg backend

latex: Enable LaTeX support

qt4: Enable QT4Agg backend

[+]tkinter: Enable tkAgg backend

wxpython: Enable wxAgg backend

というわけであらためて、インストール

sudo port install py26-matplotlib +cairo +gtk2 + tkinter

これで無事、cairo, gtk2,tkinterが使えました!使用法などはまた改めて。とりあえず、出力に思ったほどの違いは出てないような気がしました。

[]matplotlib backend matplotlib backend - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib backend - 雲雀は高く空を舞い matplotlib backend - 雲雀は高く空を舞い のブックマークコメント

matplotlibでグラフを書くにはbackendにgraphic engineを指定する必要がある。とりあえずはこんな感じでok

import matplotlib

matplotlib.set('TkAgg')

こちらによるとbackendには色々選べるようで

GTKAgg
Gimp系みたい。Agg rendering to a GTK canvas (requires PyGTK)
GTK
GDK rendering to a GTK canvas (not recommended) (requires PyGTK)
GTKCairo
Cairoつかえるの?Cairo rendering to a GTK Canvas (requires PyGTK)
WXAgg
exWidgetsをつかえるとか。それぞれのOSネイティブ環境(の用な?)グラフィックが可能。Agg rendering to to a wxWidgets canvas (requires wxPython)
WX
Native wxWidgets drawing to a wxWidgets Canvas (not recommended) (requires wxPython)
TkAgg
何もインストールする事なく使えた。X11系?Agg rendering to a Tk canvas (requires TkInter)
QtAgg
Qt系。Agg rendering to a Qt canvas (requires PyQt)
Qt4Agg
最新のQt系。Agg rendering to a Qt4 canvas (requires PyQt4)
FLTKAgg
なんかよくわからないけどcross-platform/C++。Agg rendering to a FLTK canvas (requires pyFLTK)

AGGはこちら関係でAnti-Grain Geometryなもの、ちゃちゃっと見た感じアンチエイリアシングおよびサブピクセル精度のグラフィックを実現するもの、とか。AGGありとなしならとりあえずAGGを使っておけば良いんじゃないかしら。


とりあえず、wxaggが幸せそうな雰囲気がする。あとCairoはちょっと気になる。

追記

以下には特に有益な情報はありません。

とりあえずwxWidgets 2.9がportsに入ったら改めて挑戦します。


2

と思ったら

sudo port install py26-wxpython

にこけた。

のでおもむろに

sudo port install py26-gtk

3

あらためて

sudo port -d install py26-wxpython

見てみると2つエラーが出てて、

../src/common/intl.cpp:2060: error: 'smScriptLang' was not declared in this scope

../src/common/intl.cpp:2060: error: 'GetScriptVariable' was not declared in this scope

これは…と思って調べてみたらあった。

The reason is that the default compiler on 10.6 is gcc 4.2, and if you are on a Core 2 Duo which is 64-bit capable, you end up compiling Carbon-only 2.8 for 64 bits which fails, due to the lack of 64-bit Carbon support. If you want 64-bit wxWidgets on OS X you'll need 2.9+ and configure -with-osx_cocoa - see below; but remember that 2.9 is not an official, stable release and wxOSX/Cocoa is not yet complete.

Snow Leopardコンパイラがgcc4.2でC2Dは64bit動作可能で、とかなんとかでwxWidgets 2.8は32bit carbonでしか動かないからコンパイルにこける。

なんとか動かしたかったら2.9以上で-with-osx_cocoaにてコンパイルすれば良いけど、いまのところ2.9はアンオフィシャルで非安定でwxOSX/Cocoaはまだまだ作成途中だから覚悟しとけ。

http://wiki.wxwidgets.org/Development:_wxMac

とのこと。

So, to compile with 2.8 on a 64-bit Mac, you have to explicitly indicate the architectures you want:

wx2.8でなんとかしたかったら以下のようにするのが現実解。

つまり 32bit intel用にコンパイル。もしあれだったら -arch ppcも加えればユニバーサルバイナリにする事もできるよ

arch_flags="-arch i386"
./configure CFLAGS="$arch_flags" CXXFLAGS="$arch_flags" LDFLAGS="$arch_flags" OBJCFLAGS="$arch_flags" OBJCXXFLAGS="$arch_flags" ...

This makes the library and samples build nicely for Intel 32-bit targets, and you can also add -arch ppc to the arch_flags so that you can build universal binaries.

とのこと。うーん…32bit…。まぁいいか。

4

とおもったんだけど、wxWidgetsのページを見ると2.9は既にリリースされてるので

port install wxwidgets

としてみた。失敗した。

5

さすがにちょっとちゃんと調べてみようと言う事で検索。

こちらによると

  1. wxwidgets 2.8の32bitでいくか2.9でcocoa 64bitでいくかだけど、だいたい色々64bitになってるし2.9でてるしで今更2.8withCarbon32bitなんて嫌だよね
  2. port wxwidgets-develすればいいんじゃね?portfileあげるよ
  3. おー2.9がはいったありがとう!
  4. ありがとう!
  5. ありがとう!
  6. …あれ?
  7. py26-wxpythonはいらねい…?
  8. はいらないよsvn versionだけが2.9と互換性あるからね
  9. しょうがないな、ほら つ py26-wxpython-devel.portfile
  10. あなたが神か!<いまここ

ってことだった

6

……結局wxwidgesのインストールに失敗。2.9はもう既にリリースされてるんだし、待ってれば使えるようになるだろうという事でいいやにした。

7

pygtkもインストールしてみたけど、

import matplotlib

matplotlib.use('gtkagg')

などとしてもmatplotlib._backend_gdkがないよ、ってことになる。

これは

WxAgg?とかQtAgg?はmatplotlibのインストール前に pythonからwxWidgets、Qtなどのライブラリを呼び出せるようにしておく必要があります

no title

とのこと。あるいは、matplotlibのインストール時にetup.pyで例えば

BUILD_TKAGG = 1

とするとかみたい。

ちなみにno titleをみると

This port provides variants for the different GUIs (gtk2, tkinter, wxpython).

とのことなので、gtk2は使えるみたいだけど…。まぁTkAggが使えるからとりあえず良いにしてwxaggが使えるようになるのを待つかなぁ…

[]matplotlib for python 2.6.3 on Snow Leopard (2) インストール matplotlib for python 2.6.3 on Snow Leopard (2) インストール - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib for python 2.6.3 on Snow Leopard (2) インストール - 雲雀は高く空を舞い matplotlib for python 2.6.3 on Snow Leopard (2) インストール - 雲雀は高く空を舞い のブックマークコメント

8

鋼玉(MacBook, Leopard)だとインストールできるのかな?と思って試す。portのバージョンが古いのでportのアップデートから…

sudo port selfupdate

sudo port update outdated

としたところ、lxmlのアップデートで同じようなkeyerrorが。これってもしかしてpyobjc2固有の問題じゃなくてインストーラ(easy_install)かなにかの問題?

とりあえずpython-MLを検索。

9

あった。python2.6.3とDistutilsの問題だとか。portの最新版ではなおってるから新しくしてやってご覧、とのこと。

The problem was due to a Distutils incompatibility released in Python

2.6.3. It will be fixed in 2.6.4 which will be released in two weeks

but the MacPorts maintainers have already patched setuptools to get

around it. Just rerun:

sudo port sync

and try the install again. This time it should also install a new

version of py26-setuptools and the install of py26-pyobjc2 should now

work.

sudo port clean py26-pyobjc2

sudo pot clean py26-matplotlib

sudo port selfupdate

sudo port outdated

sudo port install py26-pyobj2

...できない…おなじKeyErrorが出る…。とりあえずportにまだ実は入ってないのかな、って事で、Distutilの自力インストールをはかるよ。

10

とりあえず、この問題についてはこちらにまとめてあった

File "...setuptools/command/build_ext.py", line 85, in get_ext_filename KeyError: 'xxx'

Cエクステンションを含むパッケージのインストール中にこんな感じのKeyErrorが出ると思うけど、これの対処法は超簡単だ。

The fix is quite simple, it can be done by the end-user or in your package (which is better of course).

In your package : use “Distribute >= 0.6.3″ distribution instead of the usual “Setuptools == 0.6c9″ distribution in you dependencies list. The code remain unchanged and you can still “import setuptools” and have it working fine.

パッケージの配布をする場合はDistribute >= 0.6.3にすればおk

As an end-user: just do a Distribute installation and your fine “(sudo) easy_install Distribute”

エンドユーザの場合はDistributeをインストールすれば良いよ。単純に sudo easy_install Distributeすれば良いよ

Python 2.6.3 and Distribute. | Fetchez le Python

これだ! Thank you, Tarek Ziadé!

というわけであらためて

sudo /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/easy_install-2.6 Distribute

sudo port install py26-matplotlib

…できた!

まとめ

今回の問題はSnow Leopard固有の問題ではなくPython 2.6.3とDistribute (<0.6.3)にまつろう問題でした。もう既に解決されつつある、という事なのでこれを書いてる頃にはこれらの試行錯誤は意味がなくなってるかもしれません。あう。

[]matplotlib for python (3) 環境を整えるよ matplotlib for python (3) 環境を整えるよ - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク - matplotlib for python (3) 環境を整えるよ - 雲雀は高く空を舞い matplotlib for python (3) 環境を整えるよ - 雲雀は高く空を舞い のブックマークコメント

ここら辺を参考に、必要そうなものを適当にインストール

sudo port install numpy

sudo port install scipy # 時間かかった

sudo port install readline

sudo port install py26-ipython

sudo ln /opt/local/bin/ipython2.6 /usr/local/bin/ipython

RobinsonRobinson 2011/10/03 13:55 I acuatlly found this more entertaining than James Joyce.

pcwmaxspcwmaxs 2011/10/03 18:14 Fi7WPH <a href="http://bpqaguzvfbxo.com/">bpqaguzvfbxo</a>

bqsadiobqsadio 2011/10/05 00:15 KIqeMq , [url=http://bvzncfpqdymf.com/]bvzncfpqdymf[/url], [link=http://fxgbqewsnmgc.com/]fxgbqewsnmgc[/link], http://azlrajevtnar.com/

amebxuyfrwamebxuyfrw 2011/10/06 17:22 GAgu6v <a href="http://fchquvejjirz.com/">fchquvejjirz</a>

ゲスト



テクノラティプロフィール