09/10/24 21:06:22
高機能で柔軟性があり、使い易く、数式表示がデフォルトで可能で、
美しいグラフが作成できる人気のグラフライブラリである Matplotlib
のスレッドです。
ギャラリー
URLリンク(matplotlib.sourceforge.net)
URLリンク(matplotlib.sourceforge.net)
ユーザーズガイド
URLリンク(matplotlib.sourceforge.net)
ダウンロード
URLリンク(sourceforge.net)
2:デフォルトの名無しさん
09/10/24 21:07:25
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
3:デフォルトの名無しさん
09/10/24 21:07:30
スレリンク(unix板:708番) より:
gnuplot vs matplotlib
2Dプロット系: "できること" で言えば、パイチャートなどがデフォルト
でプロットできる matplotlib の方が上。ちょっと混み入った設定や
アノテーションの加え方も matplotlib の方が楽。
3Dプロット系: 完成度と速度の面で gnuplot の勝ち。
プロットプログラムの再利用性: これは matplotlib の余裕勝ち。
見た目の綺麗さ: matplotlibではデフォでグラフにアンチエイリアスや
ヒンティングがかかっている。gnuplot だと wx 末端を使えば
matplotlibのそれとほとんど同様になるが、他の末端も
含めて評価するとmatplotlibに軍配が上がる。
数式: TeXのフォントがデフォルトで入っていて、インストール直後
LaTeXのインストール無しでも即効TeXと同じように書けるので matplotlib の勝ち。
結論としては、多種多様のプロットを生成したいのであれば、
matplotlibを使った方が長期的に見て効率が良さそう。特に python 使い
であれば、断然 matplotlib の方が有利。それと、gnuplotはあまり融通
が効かず、ちょっとした変更が時に面倒だったり、"できそうでできない"
ことが何気に結構あったりしたが、matplotlibなら、その心配は無さそう。
しかし、「簡単にsin(x)のプロットが作れればいいやー」程度のユーザーなら、
gnuplotでいいと思うし、そういった単純なグラフなら gnuplot の方が簡単。
4:デフォルトの名無しさん
09/10/24 21:14:56
>>1乙。ありがとう!
5:デフォルトの名無しさん
09/10/24 21:18:52
自分でスレ立てといて言うのもなんだが、
google、インデックス早っ!
もう既にこのスレが検索結果(結構上位)に引掛ってるし。
URLリンク(www.google.com)
6:デフォルトの名無しさん
09/10/24 21:29:06
Debianでmatplotlibインストールしたら、バージョンが0.98.1だったぁ!
3次元プロットがギリできない~
7:デフォルトの名無しさん
09/10/24 21:29:49
三次元空間において、
曲面 z = f(x,y)と
曲面 z = g(x,y)
が交わる曲線をプロットする良い方法はあるかな?
8:デフォルトの名無しさん
09/10/24 21:34:20
>>7
普通に同じaxesにfとgを加えればいいでしょ。
使ったことないけど、 ax.add_collection3d 見てみれば?
URLリンク(matplotlib.sourceforge.net)
9:デフォルトの名無しさん
09/10/25 01:16:42
これ良くできてるけど、意外と知られてないよね。
gnuplotだけで頑張ってる人は一見の価値あり。
10:デフォルトの名無しさん
09/10/25 09:58:48
gnuplotだと付属のヘルプで大体マスターできるけど、
matplotlibって何か簡潔で分かり易いのない?
11:デフォルトの名無しさん
09/10/25 11:25:20
gnuplotで頑張ってきた人だけど、おもしろそうなので
ちょっと遊んでみます。
12:デフォルトの名無しさん
09/10/25 21:55:41
gnuplotだと『splot 'data.dat' using 5:6:18』とすればプロットしてくれたけど、
こっちでは自分で全部書かないといけないのかな?
自分は↓こうしているんだけど、もっと簡単な方法ってある?
#!/usr/bin/env python
import re
myRegExp = re.compile('^\s*#')
column1 = 5
column2 = 6
column3 = 18
X = []
Y = []
Y = []
fname = open('data.dat', 'r')
for lines in fname:
if myRegExp.match(lines):
print '1 line ignored.'
else:
itemList = lines.split()
X.append( float( itemList[ column1 ] ) )
Y.append( float( itemList[ column2 ] ) )
Z.append( float( itemList[ column3 ] ) )
13:デフォルトの名無しさん
09/10/26 03:49:21
基本的にプロット用のライブラリだから、データの用意は自分で...って感じだけど、
テキスト形式を読みこむ関数はある(実際はmatplotlibのバックエンドのnumpyの機能)。
import pylab
data = pylab.loadtxt("data.dat", comments="#")
X, Y, Z = data[:,(5, 6, 8)]
14:デフォルトの名無しさん
09/10/26 04:00:13
>>12
即席で書いたやつだが、こうすれば良し。
LL = [ line.strip().split() for line in file('data.dat') ]
columns = map(list, zip(*LL))
columns[4], columns[5], column[18]
15:デフォルトの名無しさん
09/10/27 05:16:57
matplotlibはpythonのライブラリだけど、
コアな計算部分は numpy や PIL だから、
中身は大体Cの部分が実行されてるよね?
スピードはgnuplotと比べてどのぐらい違うんだろうか?
16:12
09/10/27 12:12:57
>>13-14
ありがとう!だいぶ短くなるんですね。
pythonを使うのが初めてなので、まず言語の勉強から始めなければ。
17:デフォルトの名無しさん
09/10/27 17:19:13
>>13
NumPyでこんなスライスができるのは知らなかった
18:デフォルトの名無しさん
09/10/27 22:45:51
これはまれにみる糞スレage
19:デフォルトの名無しさん
09/10/28 23:16:55
python 使いで gnuplot の限界を感じた人が
使うってだけじゃなくて matplotlib 自体がお目あてで
来る人もいるんだねぇ
そういう人むけのチュートリアルとかが出来るといいね
20:デフォルトの名無しさん
09/11/01 02:19:36
Matplotlibでgriddataを使っているヒトいますか?ちゃんと動きますか?
Debianにgriddataをソースからインストールしたのですが、
セグメントエラーを吐くようになってしまいました。
21:デフォルトの名無しさん
09/11/06 09:06:05
>>1
ギャラリーにSICPで見かけたおねえさんがw
22:デフォルトの名無しさん
09/11/06 12:15:54
lenaだよ
23:デフォルトの名無しさん
09/11/06 18:15:36
pngファイルを読み込んでそれをそのままmatplotで表示って、
皆さんどうやってますか?
24:デフォルトの名無しさん
09/11/06 18:20:08
>>23
うーん・・・。
背景にしたいの?
25:デフォルトの名無しさん
09/11/06 18:29:56
>>24
たとえば入力した画像の明るさを読み取って、ある値以上の明るさの画素は白、他は黒にして出力
などといった画像処理につなげたいのですが…
26:デフォルトの名無しさん
09/11/06 19:34:28
import pylab
import scipy.misc
m = scipy.misc.imread("grayscale.png")
pylab.imshow(m < 127)
pylab.savefig("output.png")
こんなんでどう?
27:デフォルトの名無しさん
09/11/06 22:28:28
>>26
おお!ありがとうございます!
今ちょっと手元に無いので明日試してみます
28:デフォルトの名無しさん
09/11/08 02:46:26
研究室の友人(C言語しか知らない)にPython勧めたら、その場に居合わせた他の研究室の奴に、
「なんでそんな聞いたこともない言語使うの?VBでいいじゃん」
って言われてしまった。理系だったらPythonのがいいと思うんだけどなぁ。。。
29:デフォルトの名無しさん
09/11/08 02:56:20
聞いたことも無いのはお前が不勉強だからだってすぐに言えば良かったのに
30:デフォルトの名無しさん
09/11/08 02:57:45
python しらねーの?w
情弱 プギャー w
でよかったんじゃね?
31:デフォルトの名無しさん
09/11/08 03:27:41
>>28
両方使えるのがいい。
VBはExcel操作できるから、知っていれば意外と使える。
32:デフォルトの名無しさん
09/11/08 10:57:21
excel操作なんか大抵の言語でできるよ(当然pythonも)
33:デフォルトの名無しさん
09/11/08 11:30:12
VBで出来ないことまで出来るよねw
34:デフォルトの名無しさん
09/11/08 11:50:40
Fランク大学は放置しる
35:デフォルトの名無しさん
09/11/08 11:51:53
Excelに10000行くらいのデータを貼り付けてプロットしてる人を見るとアホかと思う
36:デフォルトの名無しさん
09/11/12 18:17:20
>>35
瞬時に結果表示できるなら、それで問題ない。
37:デフォルトの名無しさん
09/11/12 19:11:15
データをとるたびにそれを繰り返してるってことでしょ。
38:デフォルトの名無しさん
09/11/12 19:23:59
Excelって小学生並みのアホなグラフしか描けないのに何で使うのかな
39:デフォルトの名無しさん
09/11/12 20:27:31
商品として優れてるからだろ。
いい製品なんて大抵ゴミだし。
40:デフォルトの名無しさん
09/11/12 21:44:39
>>37
まぁ、コピペの部分ぐらいはマクロ使うかな。
41:デフォルトの名無しさん
09/11/16 13:26:05
あんま、話題ないんね。
なんか良い入門ないかな。
28だけど、研究室に布教しようと努力中。。
42:デフォルトの名無しさん
09/11/16 13:30:01
最近使いはじめたよ。
便利でキレイでいいね。
gnuplot みたいな手軽さは無いけど。
サクっとグラフを見たいときは gnuplot で
貼り付けたい時なんかは、もう Matplotlib だね。
43:デフォルトの名無しさん
09/11/17 07:53:32
入門書と言えばBeginning Python Visualization位しか持ってないんだけど、
他にある?
この本でもChapter 6で扱ってるだけ。
あんまり詳しくない。
もっと網羅的な奴ないかな。
44:デフォルトの名無しさん
09/12/01 11:22:44
matplotlib でplot 出力するのは
たいてい png な説明がでてるけど
ps/eps にしてもなんか"画像(ラスタイメージ)"になってるね?
細かいデータを打って拡大すると
ticとかが同じ線幅のはずなのに太かったり細かったりって
なっちゃうのはどうにかならないのかな?
(savefig で dpi=200 とかしてもダメみたい…)
あと,"真ん中あたりに小さくグラフが描画される" けど
もっと出力サイズ一杯に描画する方法ないんでしょうか?
(.ps だと a4目一杯)
savefig にはそういうオプションなさそうだけど…
45:デフォルトの名無しさん
09/12/01 12:06:02
手元の環境では普通にベクトルデータで生成されるよ。svgはどう?
46:デフォルトの名無しさん
09/12/01 12:59:46
あれ,そうですか.
確かに ps データのなかを改めて見ると
そんな感じに見えますね… orz
うーんなんでだろう.
gv で見るときの問題なのかなぁ...
47:デフォルトの名無しさん
10/01/14 09:27:49
matplotlib で line なグラフを描くとき
線種って結構限られていますよね?
実線('-') 破線('-.') 点線(':')
gnuplot だと(指定方法が色とごっちゃになってる問題はありますが)
10種類以上くらいの破線種類なんかがあったりしますが,
破線の種類なんかをもっと沢山用意してプロットするのは
できないんでしょうか?
-・-・- とか --・--・--・-- とか
line の属性をほいほいっと弄れば出来るとか…
48:デフォルトの名無しさん
10/01/14 16:27:03
(line1, ) = plot([1, 2, 3], [3, 4, 5])
line1.set_dashes((2, 1, 2, 1, 2, 5)) # インクのon/offを交互に指定
savefig("asdf.png")
もっといい方法があるかもしれないですが
49:デフォルトの名無しさん
10/01/15 17:07:16
くだすれPython(超初心者用)から来ました。
オライリーの「集合知プログラミング」にnumpyを使った非負値行列因子分解と言うのがあるのですが
(ソースは英語版ですが URLリンク(examples.oreilly.com) から落とせます)、
これを乗法的更新ルールというので行うと
スレリンク(tech板:785番) のようにすぐにNaNになってしまいます
(10回に一回のprint costを毎回print costするようにすると3周目でnanになるようです)。
このスレの方ならnumpyのことをご存知で無いかと思い質問したしだいです。よろしくお願いします。
50:デフォルトの名無しさん
10/01/15 17:15:54
ソースコードは10章のnmf.py(データ取得部はnewsfeatures.py)を見てください。
51:デフォルトの名無しさん
10/01/15 18:29:38
numpyのバージョンは?
52:デフォルトの名無しさん
10/01/16 00:53:45
>>51
numpy-1.4.0-win32-superpack-python2.6
をインストールしました。
53:デフォルトの名無しさん
10/01/16 13:15:11
>>52
nnmf.pyを落としてきて,ちょっと見てみたけど
29行目のループ終了条件
if cost == 0: break
を
if cost < 1e-8: break
とかにすればいいんじゃない?
54:デフォルトの名無しさん
10/01/17 06:13:27
>>53
レスありがとうございます。ただcosr==0も終了条件なのですが、
繰り返し回数の最大はiterで引数で与えているので、あまり関係ないかと。
3回繰り返すとnanが出てくるようです。
55:デフォルトの名無しさん
10/01/17 08:53:54
いやこれ繰り返し回数じゃなくて
二乗距離でしょ?
かえてやってみたのかと
まぁいいや
56:デフォルトの名無しさん
10/01/17 10:54:49
>>55
すみませんおっしゃる事が良くわかりません。
これってcostのことですか?iterのことですか?それ以外ですか?
>>53 の変更はやってみたのですが、結果は変わりませんでしたが、
そういう意味ではないのでしょうか?
57:デフォルトの名無しさん
10/01/17 13:51:06
>>56
そっか、変えてやってみてもダメでしたか。すまんかった。
書籍持ってなくてnnmf.pyをちら見しただけでコメントしたんだけど
ウェイト更新とかかいてあるんで、ウェイト自体が微小になってしまうことを避ける
条件文なのかと思ってた。
いま改めてみると、ランダムに生成したWとHの積と
与えられたVが等しくなるかどうかのチェックなんだね。
ちょっとググってみて、非不値行列行列因子分解の乗法更新式に関する文献↓を流し読みしてみたけど
URLリンク(www.brl.ntt.co.jp)
ソースのアルゴリズムは文献のLS法どおりなので問題なさそう。
Pythonには組み込み関数の"iter"があるのに、引数名に"iter"を使っているとか
最初に"h"を生成しているリスト内包表記が、内側と外側で同じループ変数名を使っているとか
スタイルで気になるところはあるけど。
"h"と"w"を更新している箇所は要素同士の計算なので
h, hn, hdやw, wn, wdのある要素[i,j]を更新前後で表示してみれば
NaNになる理由がわかると思うよ。
58:デフォルトの名無しさん
10/01/18 17:33:11
>>57
print デバッグですね。分りました。
59:デフォルトの名無しさん
10/01/19 18:16:55
>>51 factorize(..) の引数にはどんなデータを与えているんだ。
俺の環境:Enthought python 2.5 では下のように小さな値の行列でも NaN は出てこない
python temp.py
from numpy import *
def difcost(a,b):
  dif=0
  for i in range(shape(a)[0]):
    for j in range(shape(a)[1]):
      # Euclidean Distance
      dif+=pow(a[i,j]-b[i,j],2)
  return dif
def factorize(v,pc=10,iter=50):
  ic=shape(v)[0]
  fc=shape(v)[1]
  # Initialize the weight and feature matrices with random values
  w=matrix([[random.random() for j in range(pc)] for i in range(ic)])
  h=matrix([[random.random() for i in range(fc)] for i in range(pc)])
  # Perform operation a maximum of iter times
続く
60:デフォルトの名無しさん
10/01/19 18:17:35
  for i in range(iter):
    wh=w*h
   
    # Calculate the current difference
    cost=difcost(v,wh)
   
    if i%10==0: print cost
   
    # Terminate if the matrix has been fully factorized
    if cost==0: break
   
    # Update feature matrix
    hn=(transpose(w)*v)
    hd=(transpose(w)*w*h)
 
    h=matrix(array(h)*array(hn)/array(hd))
    # Update weights matrix
    wn=(v*transpose(h))
    wd=(w*h*transpose(h))
    w=matrix(array(w)*array(wn)/array(wd))
   
  return w,h
import scipy as sc
print factorize(sc.randn(10,10)/1000)
61:デフォルトの名無しさん
10/01/29 09:36:08
& nbsp;には最後にセミコロン付ける必要があるぞw
62:デフォルトの名無しさん
10/02/12 09:12:09
これはひどい
63:デフォルトの名無しさん
10/02/17 12:53:49
そういえば統計方面の R言語のスレってどこかの板にある?
あるなら関連スレとして参照しておくくらいは欲しい
64:デフォルトの名無しさん
10/02/17 14:00:06
ここにあったのを見た覚えがある
65:デフォルトの名無しさん
10/02/17 14:03:02
ここにRみたいだ
スレリンク(math板)
66:デフォルトの名無しさん
10/02/22 15:15:45
wxバックエンドの場合、
どうやってバックグラウンドカラーを変更できるの
(デフォはグレイ)?
67:デフォルトの名無しさん
10/02/27 10:59:30
質問させてください。
URLリンク(d.hatena.ne.jp)
を参考にローソク足チャートを描きました。また
URLリンク(matplotlib.sourcearchive.com)
を見て、quotesにvolumeの値を加えれば、volume_overlay3 がそのまま使えると思ったのですが、
実際に描画してみると、全部同じ高さの棒になってしまいます(上に突き抜けてる?)。
どなたかこのvolume_overlay3の使い方が分かる方いらっしゃいませんでしょうか。
68:67
10/02/28 02:31:01
コード書きましたようはこんな感じでやりたいんですが
def downyahoo():
date1 = datetranslate("2009/02/18")
date2 = datetranslate(time.strftime("%Y/%m/%d"))
quotes=[]
quotes = matplotlib.finance.quotes_historical_yahoo(^GSPC, date1, date2, False, True, None)
fig = figure()
ax = fig.add_subplot(111)
matplotlib.finance.candlestick(ax, quotes, 0.2, 'r', 'k')
matplotlib.finance.volume_overlay3(ax, quotes)
ax.xaxis_date()
fig.autofmt_xdate()
show()
def datetranslate(date):
d = date.split('/')
startDate = datetime.date(int(d[0]),int(d[1]),int(d[2]))
return startDate
def main():
downyahoo()
69:デフォルトの名無しさん
10/02/28 17:50:19
>>68
volume_overlay3はメンテされてないみたい
ほとんど同じ内容の "candlestick2" を参考にして
volume_overlay3を書き直してみたよ
URLリンク(codepad.org)
70:デフォルトの名無しさん
10/02/28 18:10:55
users-mlで同じ症状を訴えている人がいるんだけど
思いっきり無視されてるんで、メンテされていないのかなと
URLリンク(www.mail-archive.com)
71:デフォルトの名無しさん
10/02/28 23:28:07
>>69
ありがとうございます。本家よりこっちの方が進んでいると言うことですかw
72:デフォルトの名無しさん
10/03/03 17:27:23
date2numした数字をdate2numで元に戻したいのですが、
dates=[matplotlib.dates.num2date(d[i][0]).date() for i in range(len(d)) if d[i][5]==d[i][5]]
とやると、printしたときにdatesの中に
[datetime.date(2010, 2, 25), … datetime.date(2010, 3, 1)]
とか入るんですが、これを
['2010, 2, 25',…'2010, 3, 1']
のように短くしたいのですが、どうやればいいか教えて下さい。
73:デフォルトの名無しさん
10/03/03 17:30:16
num2dateで元に戻したいでした…
74:デフォルトの名無しさん
10/03/03 18:12:13
strftime
75:デフォルトの名無しさん
10/03/03 21:31:10
matplotlibスレがあるなんて思わなかった!
76:デフォルトの名無しさん
10/03/03 22:07:11
この本買ったけど、基礎的な事を学ぶには良かったよ。
Matplotlib for Python Developers
URLリンク(www.amazon.co.jp)
Qt4のWidgetとする方法とか、参考になった。
77:デフォルトの名無しさん
10/03/04 07:52:49
2次元グラフ作成ソフト「Ngraph for Windows」がフリーソフト化
URLリンク(www.forest.impress.co.jp)
78:デフォルトの名無しさん
10/03/04 11:37:02
>>74
strftime(%Y/%m/%d)で出来ました。ありがとう。
79:デフォルトの名無しさん
10/03/04 12:35:12
本なんてあるんだ。
80:デフォルトの名無しさん
10/03/04 15:30:33
とりあえずお布施で買っておくか
81:Zeno ◆5nZQbNmQPs
10/03/04 16:28:01
吾も情報を落とすことにするか。
>>76
早速 "Matplotlib for Python Developers" を手に入れてみた(英語版)。
Web アプリや Matplotlib のグラフィックインターフェースへの組み込み方の
説明に力を入れてはいるものの、肝心の matplotlib の活用/応用系のチャプターは
短絡的すぎる。実際、そもそも作者の言う "advanced" は "basic" レベル止まりで、
全体的に内容が浅くなっている件は否定できない。
もし興味があれば
URLリンク(www.amazon.com)
も平行して読んでみると良いかもしれん (こちらも初歩的なプロティングしか触れていない) が、
個人的に、 URLリンク(matplotlib.sourceforge.net) を参照するのが
上達の一番の近道だと思っている。
82:デフォルトの名無しさん
10/03/04 21:05:57
>>81
確かに内容浅いね。広く浅くという感じか。
俺は結局公式ドキュメントやexamples、場合によっては本体のソースを見ながらやってる。
83:デフォルトの名無しさん
10/03/05 20:33:20
意外に欲しいメソッドが無かったりするね。
例えば、tick labelのフォントを変えたりとか。
figureの保持するlegendを取得するメソッドも無い。axesにはあるのに。
まぁ、俺が知らないだけかも知れないけど。
84:デフォルトの名無しさん
10/03/06 00:00:21
結構どんどん追加されていってるからね
伊達にv1.0未満じゃないというか…
オンラインドキュメント調べて
あれこの機能が動作しないと思ったら
最新版じゃないと駄目だったなんてよく起きるし
85:デフォルトの名無しさん
10/03/06 22:54:12
あるねぇ。
リリース版では「class IndexFormatter」も「Formatter」を継承してなくて、動くはずのものがエラーになった。
86:デフォルトの名無しさん
10/05/09 21:12:20
gnuplotとGhostscript と GSviewあたりを最新版にしたら、うまくPNGとか作成されなくなった
色々と設定し直せばいいんだが、面倒になったきた
そこで、pythonで別のグラフ作成方法ないかと思って、これにたどり着いたが・・・
python3使ってるわ・・・残念
>>25
これ他方法でもできないかな
87:デフォルトの名無しさん
10/05/12 11:06:47
試していないから間違っていたら聞き流して欲しいんだけど,awkで
URLリンク(gauc.no-ip.org)
URLリンク(gauc.no-ip.org)
を参考にしたら出来そうな気がする.
88:デフォルトの名無しさん
10/05/16 14:43:45
Pythonで学ぶ萌え萌え統計学 ー 正規分布からマルコフ連鎖モンテカルロまで 2300円