White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

matplotlib触ってみた

ずっと触ろうと思ってたが放置してたmatplotlibを触ってみた。

以下の記事を参考にしながら書いてみた。

良いもの。悪いもの。:matplotlibの簡単な説明
http://handasse.blogspot.com/2007/06/matplotlib.html
良いもの。悪いもの。:matplotlibによる線種や色などの指定方法
http://handasse.blogspot.com/2007/06/matplotlib_28.html


まず使うにはpythonと、python-matplotlibのインストールが必要。うちの環境(Ubuntu 9.04)ではさらにpython-tkも入れる必要があった。


まずplot()で描画を行う。show()で描画した画面を表示する。前に描画した結果を消したければclf()を実行する。


plot関数には描画するデータ、そして描画オプションをつける。通常は線で結ばれるっぽいけど'.'オプションをつけると点のみ描画される。


axis関数は描画するx軸、y軸の範囲を設定する。plot関数の後に実行しないとダメみたい。axix()の代わりにxlim(),ylim()でもOK.

ソース

from pylab import *

points = [ [1,2],[2,3],[3,1],[-2,-1],[-3,-3],[-2,-4] ]

xs = []
ys = []
for (x, y) in points:
    xs.append(x)
    ys.append(y)

plot(xs,ys,".")
axis([-5,5,-5,5])
show()

結果

課題

  1. Rでもこんな風に地道に点を与えて描画できるんですかね?
  2. [ ( 1,2,3 ), ( 4,5,6 ) ]->[ (1,4), (2,5), (3,6) ]と変換するにはzip()使えばいいんだけど、上の例ではzip関数つかっても[ [1,2,3,-2,-3,-2], [2,..]]と変換できないっぽいんですが。
  3. 関係ないけどUbuntu 9.04のOpera,Fxが重すぎて日記更新もままならん。しかもCore2 Duo E6600(2.4GHz)なのに1.6GHzとか表記されてるし。何だこりゃ。->これかhttp://viva-ubuntu.net/?p=1555

追記

1に関して。pointsでできるらしい(thx syou6162!)


2に関して。こうすればうまくいく。

>>> points = [ [1,2],[2,3],[3,1],[-2,-1],[-3,-3],[-2,-4] ]
>>> (xs,ys) = zip(*points)
(1, 2, 3, -2, -3, -2) (2, 3, 1, -1, -3, -4)

zipにリスト全体渡しちゃだめですね。


3に関して。VGAドライバが腐ってるのとCPU周波数コントロールができてないの2点。
http://viva-ubuntu.net/?p=1555
http://blog.miraclelinux.com/asianux/2009/07/ubuntu-904-wi-2.html