Matplotlib でグラフプログラミング【Python】

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2009/10/24(土) 21:06:22

高機能で柔軟性があり、使い易く、数式表示がデフォルトで可能で、
美しいグラフが作成できる人気のグラフライブラリである Matplotlib
のスレッドです。


ギャラリー
http://matplotlib.sourceforge.net/gallery.html
http://matplotlib.sourceforge.net/users/screenshots.html

ユーザーズガイド
http://matplotlib.sourceforge.net/contents.html

ダウンロード
http://sourceforge.net/projects/matplotlib/files/matplotlib/matplotlib-0.99.1/
2010/01/18(月) 17:33:11
>>57
print デバッグですね。分りました。
59デフォルトの名無しさん
垢版 |
2010/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デフォルトの名無しさん
垢版 |
2010/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)
2010/01/29(金) 09:36:08
& nbsp;には最後にセミコロン付ける必要があるぞw
2010/02/12(金) 09:12:09
これはひどい
2010/02/17(水) 12:53:49
そういえば統計方面の R言語のスレってどこかの板にある?

あるなら関連スレとして参照しておくくらいは欲しい
2010/02/17(水) 14:00:06
ここにあったのを見た覚えがある
2010/02/17(水) 14:03:02
ここにRみたいだ
http://science6.2ch.net/test/read.cgi/math/1224142396/
66デフォルトの名無しさん
垢版 |
2010/02/22(月) 15:15:45
wxバックエンドの場合、
どうやってバックグラウンドカラーを変更できるの
(デフォはグレイ)?
67デフォルトの名無しさん
垢版 |
2010/02/27(土) 10:59:30
質問させてください。

http://d.hatena.ne.jp/noazoh/20091023/1256293199
を参考にローソク足チャートを描きました。また
http://matplotlib.sourcearchive.com/documentation/0.90.1/namespacematplotlib_1_1finance_828611c3468bfc1d1b336155704f4b12.html#828611c3468bfc1d1b336155704f4b12
を見て、quotesにvolumeの値を加えれば、volume_overlay3 がそのまま使えると思ったのですが、
実際に描画してみると、全部同じ高さの棒になってしまいます(上に突き抜けてる?)。

どなたかこのvolume_overlay3の使い方が分かる方いらっしゃいませんでしょうか。
6867
垢版 |
2010/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()
2010/02/28(日) 17:50:19
>>68

volume_overlay3はメンテされてないみたい
ほとんど同じ内容の "candlestick2" を参考にして
volume_overlay3を書き直してみたよ

http://codepad.org/vvKwA6wO
2010/02/28(日) 18:10:55
users-mlで同じ症状を訴えている人がいるんだけど
思いっきり無視されてるんで、メンテされていないのかなと

http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg12590.html
2010/02/28(日) 23:28:07
>>69
ありがとうございます。本家よりこっちの方が進んでいると言うことですかw
72デフォルトの名無しさん
垢版 |
2010/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']

のように短くしたいのですが、どうやればいいか教えて下さい。
2010/03/03(水) 17:30:16
num2dateで元に戻したいでした…
2010/03/03(水) 18:12:13
strftime
2010/03/03(水) 21:31:10
matplotlibスレがあるなんて思わなかった!
2010/03/03(水) 22:07:11
この本買ったけど、基礎的な事を学ぶには良かったよ。

Matplotlib for Python Developers
http://www.amazon.co.jp/Matplotlib-Python-Developers-Sandro-Tosi/dp/1847197906

Qt4のWidgetとする方法とか、参考になった。
2010/03/04(木) 07:52:49
2次元グラフ作成ソフト「Ngraph for Windows」がフリーソフト化
ttp://www.forest.impress.co.jp/docs/news/20100303_352467.html
2010/03/04(木) 11:37:02
>>74
strftime(%Y/%m/%d)で出来ました。ありがとう。
2010/03/04(木) 12:35:12
本なんてあるんだ。
2010/03/04(木) 15:30:33
とりあえずお布施で買っておくか
81Zeno ◆5nZQbNmQPs
垢版 |
2010/03/04(木) 16:28:01

吾も情報を落とすことにするか。

>>76
早速 "Matplotlib for Python Developers" を手に入れてみた(英語版)。
Web アプリや Matplotlib のグラフィックインターフェースへの組み込み方の
説明に力を入れてはいるものの、肝心の matplotlib の活用/応用系のチャプターは
短絡的すぎる。実際、そもそも作者の言う "advanced" は "basic" レベル止まりで、
全体的に内容が浅くなっている件は否定できない。

もし興味があれば
ttp://www.amazon.com/Beginning-Python-Visualization-Transformation-Professionals/dp/1430218436/
も平行して読んでみると良いかもしれん (こちらも初歩的なプロティングしか触れていない) が、
個人的に、 ttp://matplotlib.sourceforge.net/gallery.html を参照するのが
上達の一番の近道だと思っている。
2010/03/04(木) 21:05:57
>>81
確かに内容浅いね。広く浅くという感じか。
俺は結局公式ドキュメントやexamples、場合によっては本体のソースを見ながらやってる。
2010/03/05(金) 20:33:20
意外に欲しいメソッドが無かったりするね。
例えば、tick labelのフォントを変えたりとか。
figureの保持するlegendを取得するメソッドも無い。axesにはあるのに。
まぁ、俺が知らないだけかも知れないけど。
2010/03/06(土) 00:00:21
結構どんどん追加されていってるからね

伊達にv1.0未満じゃないというか…

オンラインドキュメント調べて
あれこの機能が動作しないと思ったら
最新版じゃないと駄目だったなんてよく起きるし
2010/03/06(土) 22:54:12
あるねぇ。
リリース版では「class IndexFormatter」も「Formatter」を継承してなくて、動くはずのものがエラーになった。
2010/05/09(日) 21:12:20
gnuplotとGhostscript と GSviewあたりを最新版にしたら、うまくPNGとか作成されなくなった
色々と設定し直せばいいんだが、面倒になったきた
そこで、pythonで別のグラフ作成方法ないかと思って、これにたどり着いたが・・・
python3使ってるわ・・・残念


>>25
これ他方法でもできないかな
87デフォルトの名無しさん
垢版 |
2010/05/12(水) 11:06:47
試していないから間違っていたら聞き流して欲しいんだけど,awkで
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_114
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_254
を参考にしたら出来そうな気がする.
2010/05/16(日) 14:43:45
Pythonで学ぶ萌え萌え統計学 ー 正規分布からマルコフ連鎖モンテカルロまで 2300円
2010/12/24(金) 15:50:18
そういやこのスレ忘れ去られているんでネタ投下

scipy conference japan やろうぜって話が
python workshop で出てましたねー
この界隈に興味ある人はいるのかな?
90デフォルトの名無しさん
垢版 |
2010/12/27(月) 04:25:56
hage
91デフォルトの名無しさん
垢版 |
2011/01/30(日) 02:38:10
numpyとmatplotlibがPython3に対応したようですね。
2011/01/30(日) 02:39:15
まじで
2011/01/30(日) 05:36:09
PILはまだか
2011/01/30(日) 18:03:55
Python(x,y)とMacPortsでも対応したら本気出す>3
2011/02/01(火) 00:10:14
>>91
対応してねーじゃねぇか、ぷんすか。
2011/02/24(木) 18:01:22.07
質問させてください。
matplotlib で グラフのフレームの色を変更することは可能でしょうか?

・やりたいことは背景色を黒、メモリなどを白としたい。
1.Figureに facecolor='black'を指定し、set_axis_bgcolorで黒を
  指定することで背景を黒にできました。
2.set_xticklabels, set_yticklabelsで白を指定しメモリの数字は
 白くできました。

しかし、枠およびメモリ自体を白くする方法がわかりません。
わかる方おられましたら、お願いします。
2011/03/03(木) 22:38:15.74
>>91
numpyは1.5で対応したみたいですね。
matplotlibは、2.7までのようです。
2011/03/04(金) 16:36:25.26
matplotlibで関数の動きって表現できる?
例えばy = sinx * nとして
nが1から10まで動くとどうなるかっていうのを動的に表現したいんだけど
2011/03/04(金) 19:24:19.40
できますが
nが1から10まで動くと
振幅が変わるだけではないでしょうか
2011/03/05(土) 00:47:43.99
ごめん 例えが悪かったわ
結局は関数を更新していってその動きを見たいんだけど
そういうのはmatplotlibに組み込まれてる機能でできるの?
よければ参考になるページとか教えて貰いたいんだが
101デフォルトの名無しさん
垢版 |
2011/03/05(土) 13:52:37.64
ふう
2011/03/06(日) 19:02:55.04
なんのために汎用言語であるpythonを使っているんだ?
for i in range(10):
draw_hoge()
time.sleep(1)
10396
垢版 |
2011/03/16(水) 16:51:06.66
自己解決
#個々のグラフ領域の枠を白くする
ax = fig.add_subplot(1, 1, 1)
for child in ax.get_children():
if isinstance(child, matplotlib.spines.Spine):
child.set_color('white')

#X軸Y軸のメモリの色を白くする
#メジャーとマイナーは一度には変更できないみたい
#なので2回に分けて行う
for liney in ax.yaxis.get_ticklines(minor=True):
liney.set_color('white')
for liney in ax.yaxis.get_ticklines(minor=False):
liney.set_color('white')

2011/03/22(火) 13:24:03.28
線の色指定をするときに、任意のカラーマップから色を指定することって可能?
Gray Scaleの場合は、color = '0.75'のようにすればいいけど、
そこを別のカラーマップで0-1の間の数値を入れて指定できるようにしたいです。
2011/03/27(日) 13:27:24.41
二項分布とか正規分布とかを正確に表示したいときは自分で関数つくんないとダメ?
2011/03/27(日) 14:11:39.66
>>105
scipy.stats以下にたくさん分布関数がある
2011/04/25(月) 15:02:35.40
Python3に対応したから、初めて使ってみたらmatplotlibすげー
軽くgnuplotみたいに画面で直接拡大とかも出来るんだな
2011/04/25(月) 15:09:27.89
お、 Python3 対応きたんだあ。
2011/04/25(月) 15:35:17.49
>>100,102
同じところで詰まった…
スレッドとか必要なのかな
Tkでやってた時もよくわからなくてpygameに逃げた
2011/04/25(月) 16:39:03.66
出来た出来た
適当にバラまいたノードがランダムに動くプログラム
でも重すぎるのか途中で処理が止まる…
本当はノード数を1000以上にしたいのに
それと、きちんと再描画されてなく、毎回、点が増えていく…

pylab.ion()

NodeN=int(input("ノード数入力:"))
lisNode =[0]*NodeN
for n in range(NodeN):
 lisNode[n]=random.randint(-200,200),random.randint(-200,200)

for i in range(100):
 pylab.plot([x for x in lisNode] ,[y for y in lisNode],"*")
 pylab.draw()
 lisNode=[[lisNode[n][0]+random.randint(-1,1),lisNode[n][1]+random.randint(-1,1)] for i in range(NodeN)]
2011/04/25(月) 18:39:48.95
上書きがデフォルトなので、毎回図をクリアする必要がある。
あと、そのプログラムが望む動作をするかどうか、落ち着いてコードを読み直してみてね
2011/04/25(月) 20:06:07.41
pylab.plot([x[0] for x in ………
ですね。
手打ちで書いてたので間違えました。
とりあえず、処理が止まらなければ望む動きはしています。
上書きを除いて

画面の図、クリアを調べてみます
113デフォルトの名無しさん
垢版 |
2011/05/12(木) 11:49:54.78
外枠を太くしてgnuplotと体裁が同じになるようにしたい
何か方法ないのかな
2011/05/12(木) 22:55:32.05
>>110
こんな感じでやると、描写中の図を動かそうとすると止まっちゃうんだけどPCスペック低いからかな?
あと描写スピードが遅いのと最後に自動で図が消えちゃうのってどうすればいい?
2011/05/12(木) 23:37:13.09
>>114
>描写中の図を動かそうとすると止まっちゃう
知らんがな
>描写スピードが遅い
プログラムが悪いか、データ点が多すぎるか
>最後に自動で図が消えちゃう
たぶんあなたが消してる

>>110は真似しない方が・・・
2011/05/13(金) 00:10:12.82
>>114
>110のプログラムは試してないからよくは分からないけど。。

windowを動かすと描画が止まる、ってことなら、うちでもそうなる。おそらくバックエンド部分のバグじゃないかと疑ってる。最期に消えちゃうのは、プログラム最後にshow()を入れると止められる。
2011/05/13(金) 01:50:14.28
>>115
>>116
ありがと やっぱ動かすと止まっちゃうのね

import matplotlib.pyplot as plt
import random

plt.ion()

x = [0]*100
y = [0]*100

random.seed();
for i in range(100):
x[i] = random.randint(-100, 100)
y[i] = random.randint(-100, 100)

plt.axis([-110, 110, -110, 110])
plt.grid(True)

for i in range(len(x)):
plt.plot(x[i], y[i] , 'kD')
plt.draw()

plt.show()

これで100個プロット打つのに9秒くらいかかるんだけどこんなものかな
あとshow入れても最後にはやっぱ消えちゃうわ
2011/05/15(日) 11:21:02.45
>>117
show()の前にioff()を入れると画面は消えない。
2011/05/16(月) 15:50:46.45
>>117
plt.ion()はコメントアウトして、
importの下からplt.show()まで時間計ったら0.15秒

for i in range(len(x)):
 plt.plot(x[i] (ry
の部分を、for文やめて
plt.plt(x,y,'kD')
に変更して、0.1秒


Windows7 SP1 32bit
i3 550 3.20GHz
メモリ 2G
Python3.1
2011/05/16(月) 21:24:39.24
drawが時間喰ってる@Python2.7
2011/05/16(月) 21:29:50.63
>>119
draw()もコメントアウトしてある
2011/05/16(月) 22:57:10.63
>>121
元の動機が図をダイナミックに更新したい、ということだからそれだと意味なくない?
2011/05/17(火) 17:03:36.09
Gridのmajorとminorの線種をそれぞれ別で指定する方法ありますか?
124123
垢版 |
2011/05/17(火) 19:46:58.24
解決しました
2011/05/23(月) 21:07:48.89
windowsだとtkですら、途中で応答無くなるのなんとかならないかな
2011/05/24(火) 21:56:18.64
横軸の線の先を矢印にすることって出来ませんか?
2011/06/13(月) 00:05:31.79
eps化してtexに貼りたいんですが、texのフォントを(Computer Modern)を使うことは可能ですか?
またpdf化の際に埋め込めますか?
128デフォルトの名無しさん
垢版 |
2011/06/28(火) 17:44:57.28
ttp://matplotlib.sourceforge.net/users/image_tutorial.html
の例(をsubplotsを使って書き直そうとしたもの)なんですが、カラーバーの位置がおかしいです。
どうしてax[0].figureで欲しいものが取れないのでしょうか?

=========================
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('stinkbug.png')

fig,ax = plt.subplots(ncols=2)
ax[0].set_aspect(1)
img1 = ax[0].imshow(img[:,:,0])
ax[0].figure.colorbar(img1,orientation ='horizontal')
plt.show()
129128
垢版 |
2011/06/28(火) 18:03:15.11
ごり押しでいけた。
plt.subplot(ax[0]).figure.colorbar(img1,orientation ='horizontal')

・・・明らかに設計ミスだと思うんだけど。
2011/06/29(水) 21:34:04.98
subplot 121, 122 で分けてるのですが、
左右の余白大きすて調整したいです。
subplots_adjust では埋められません。
ほかに何かいい方法はありませんか。
2011/06/30(木) 12:08:40.08
type 1フォントをベクトルデータでepsに埋め込めませんか?
2011/07/02(土) 18:22:05.67
> 元の動機が図をダイナミックに更新したい、ということだからそれだと意味なくない?
ハッアァァァァァァァァァァァァァァアァ??????????????
なるほどゴミなわけだ
ゴミじゃねーか
死ねよゴミ
2011/07/06(水) 01:06:18.37
>>130
matplotlibrcをいじってみるとかはどう?
2011/09/04(日) 21:06:24.11
これCUIオンリーの環境じゃ動かないの?
/var/lib/python-support/python2.5/gtk-2.0/gtk/__init__.py:72: GtkWarning: could not open display
からずらずらエラーで動かないよ
plt.savefig("a.png")だけでもダメなのかな
show()であかんのは納得するんだけど。。
2011/09/04(日) 21:57:56.62
うちでは動くよ
pngに変換するためのバックエンド(Agg)がインスコされてないんじゃない?
http://matplotlib.sourceforge.net/faq/installing_faq.html#backends
2011/09/05(月) 09:48:22.44
>134
同じく…
あきらめて X11 環境下でのみ作業してる

たまに ssh login してグラフの作り直しだけしたい
みたいなときに不便なので対策があったら知りたい
2011/09/06(火) 19:10:52.18
>>134
>>136
だめだね
import matplotlib.pyplot as plt
これ一行だけで落ちるからX必須みたいだ
どうにかならんか調べてみます
2011/09/06(火) 19:33:23.38
いやあの>>135をですね

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.savefig('somenum.png')
2011/09/07(水) 09:18:37.63
>>138
すいません135の意味がよくわからなかったのです。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
ありがとうございます。 解決しました
2011/09/08(木) 23:15:48.01
Numpy/Scipy,Matplotlibのチュートリアル的なサイトって
http://www.ike-dyn.ritsumei.ac.jp/~uchida/scipy-lecture-notes/index.html
実際ここくらいですか?
2011/09/09(金) 16:08:40.70
うへ,なにこれ すげーボリューム
2011/09/13(火) 08:09:30.74
numplotlib初心者です。
CentOS5のPython2.6上で使いたいのですが、
numpyインストール後matplotlib入れようと
するとド頭の環境チェックでnumpy: noとか
出ちゃってインストールできません。
numpyは1.6.1、matplotlibは1.0.1のtar拾ってきて
どちらもsetup.py installで入れようとしています。
numpy.arangeとかの結果は返ってくるので
numpyは一応入ったようなのですが、
こういう場合の対処方法ありませんか?
143142
垢版 |
2011/09/13(火) 11:17:01.71
自己解決しました。
setup.py実行時に実行フォルダ内のゴミを
拾ってしまっていたようで、一旦cleanして
再度installしたところ無事に入りました。
144142
垢版 |
2011/09/14(水) 23:24:10.47
白黒印刷用の棒グラフを作りたいのですが、
ハッチング等の白黒パターンで棒を塗り潰す
ことって可能でしょうか?
145デフォルトの名無しさん
垢版 |
2011/10/28(金) 12:52:21.33
matplotlibはデフォルトで2つのデータ点を直線で結びますが、
一部分だけ線を引かないようにすることは出来ますか。

gnuplotなら、渡すデータを
1 1
2 2

3 3
4 4
のように空行を挟んどけば、(2,2)と(3,3)はwith lineの対象外になるのですが
2011/10/30(日) 09:51:54.81
>>145
matlabだとnanなら線が途切れるな
2011/11/08(火) 11:52:07.56
去年辺りから、海外ではNumpy,Scipy,matplotlibを既存の科学用DSLの代替にしよう、
って流れが盛んですね。
米アマゾンでも、けっこうな勢いで解説書が出てるし。
既に全部、非公式ながらPython3にも対応して、前途も有望そう。

このスレも、この辺の統合スレにしたほうが盛り上がりそうですけど、
2年間で140レスか・・・
Rのスレは数学板にしかないし、ム板では盛り上がらないのかな?
2011/11/09(水) 13:53:06.66
Rは昔ここにもあった
2011/11/09(水) 14:35:55.50
ム板なんてITドカタしかいないからな
まともに数学の話出来る訳がない
2011/11/11(金) 21:13:14.56
Rやmaximaあってもいいけどな。
>>147
そういった本ほんと盛んだよな。でももっとやすうなってくれんかな
と思ってしまう。Pythonは科学関連のライブラリはかなりほうふだから
基盤として使えるようにしておくといいよね。
p3 に対応したのか。
2011/11/19(土) 12:41:07.85
wekaとscipyどっちがオヌヌメ?
152デフォルトの名無しさん
垢版 |
2011/12/06(火) 22:27:37.37
scipyかな
2011/12/17(土) 17:58:37.66
xlabelとylabelの位置が軸から離れすぎちゃう
ことがあるんだけど、たとえば
xlabel.hogehoge(0.5,-0.2)みたいな書式で
表示位置を指定する方法はありませんか?
154デフォルトの名無しさん
垢版 |
2011/12/21(水) 01:11:08.13
python2.6とmatplotlib0.99を使っています。

subplotで6個のグラフを作成し、
titleは、日本語で入れました。

その後、グラフをPSファイルで出力しようとしましたが出来ませんでした。
PNGファイルでは出力できます。

PS、PDFで出力することは可能でしょうか?教えてください。
2011/12/21(水) 08:05:45.11
>>154
savefigで拡張子を.pdfにすればPDFで、
.epsにすればEPSで出力できるはず。
WindowsのPython2.7、Linuxの同2.6で確認済み。
公式ドキュメントにはPDF、PS、PNG、SVGに
対応とあるが、.psだとだめだった記憶がある。
EPSで出力できればどうにでもなる気もするが。
2011/12/22(木) 23:37:49.32
windows 64bit版がamdしかないけど、intel cpuでも大丈夫なのかな?
2011/12/23(金) 09:05:32.23
intel EM64T は amd x64 のパクリ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況