2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

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

1 :デフォルトの名無しさん:2009/10/24(土) 21:06:22 .net

高機能で柔軟性があり、使い易く、数式表示がデフォルトで可能で、
美しいグラフが作成できる人気のグラフライブラリである 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/


205 :デフォルトの名無しさん:2016/06/17(金) 11:15:19.99 ID:l3PGNOtI.net


206 :デフォルトの名無しさん:2016/07/15(金) 00:37:49.11 ID:zIcmXt8M.net
つい先週くらいから仕事でpythonを覚えることになり、vagrantでCentOS6.8でpyenvとvirtualenvで下記の環境を作りました。

python: 3.5.2
pandas: 0.18.1
numpy: 1.11.1
matplotlib: 1.5.1
ta-lib

http://matplotlib.org/examples/pylab_examples/finance_demo.html
を参考にローソク足は出力できました。
ローソク足と同じプロットの中に移動平均線がうまく出せずに詰まってます。
データはMySQLからpandas.io.sqlで取得しています。

移動平均線は、
sma5 = pd.Series(df['close']).rolling(window=5)
sma5.mean().plot(ax=ax)
でやってみました。
ta-libでも試しましたが、ローソク足と移動平均線を出力すると、
右端と左端に縮まって表示されてしまいます。

どこかに参考になるサイトやソースがあれば教えていただきたいです。
長文で失礼しました。

207 :デフォルトの名無しさん:2016/07/15(金) 19:18:46.39 ID:8P+uiz2j.net
>右端と左端に縮まって表示されてしまいます。

画像貼るかソース貼るかなんかしろよ

208 :デフォルトの名無しさん:2016/07/15(金) 23:33:54.08 ID:zIcmXt8M.net
>207
207です、すみませんでした。
%matplotlib inline
import pandas as pd
import numpy as np
import talib as ta
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ohlc
import pymysql.cursors
import pandas.io.sql as psql

# print(df)
# date start high low close
#0 2016-01-04 18818.6 18951.1 18394.4 18451.0
#1 2016-01-05 18398.8 18547.4 18327.5 18374.0
#2 2016-01-06 18410.6 18469.4 18064.3 18191.3

dates = df['date']
tmp = df['date'].values.astype('datetime64[D]')
df['date'] = tmp.astype(float)

plt.figure(figsize=(10, 6))
ax = plt.subplot(111)
plt.xticks(df['date'][::60],[x.strftime('%Y-%m-%d') for x in dates][::60])
plt.grid()
candlestick_ohlc(ax,df.values,width=0.7,colorup='red',colordown='blue')
sma5 = pd.Series(df['close']).rolling(window=5)
sma5.mean().plot()
plt.show()

http://qiita.com/ynakayama/items/badbf9804835d2da425e
ここのページのような感じで出力させたいです。

209 :デフォルトの名無しさん:2016/07/16(土) 15:23:01.94 ID:9Y22Kipm.net
期待されてるデータはこんな感じっぽい
index start close high low

210 :デフォルトの名無しさん:2016/07/16(土) 15:24:59.58 ID:9Y22Kipm.net
ああ違うな

期待されてるデータはこんな感じっぽい
index start close low high

211 :デフォルトの名無しさん:2016/07/18(月) 11:14:03.26 ID:p3/5cugZ.net
>>210
ありがとうございます。
ヒントを頂いて、色々試しまして期待通りの出力ができました。

sma5 = pd.Series(data=df['close']).rolling(window=5).mean()
ax.plot(df['date'],sma5)

211さんの書き込みがなければ、ググり方の発想すら出てこなかったので、
本当に助かりました。ありがとうございました。

212 :デフォルトの名無しさん:2016/09/29(木) 23:38:20.85 ID:2yVpSx56.net
このようなシンプルな白黒の画像があります
http://i.imgur.com/jEgghPx.png

これを下記のコードで表示すると
from PIL import Image as image
import matplotlib.pyplot as plt
import numpy as np
im = np.array(image.open('jEgghPx.png'))
plt.imshow(im)
plt.show()

こんなヘンな赤青の図になってしまいます。
http://imgur.com/a/l9Ifw
何とかしてもとの白黒で正しく表示できないものでしょうか

213 :デフォルトの名無しさん:2016/09/30(金) 13:41:37.59 ID:4mQfWuIk.net
from scipy import misc

def mm(im):
..for y in range(len(im)):
....for x in range(len(im[y])):
......if 10 < y < 12: im[y][x] = x * 511 / len(im[y])
......if 10 < x < 12: im[y][x] = y * 511 / len(im)
..return im

(略)
im2 = misc.toimage(im, cmin=0, cmax=511)
plt.imshow(mm(np.uint32(im2)))
(略)

214 :デフォルトの名無しさん:2016/09/30(金) 13:51:49.16 ID:4mQfWuIk.net
>>213 のはネタだけど

im = np.array(image.open('jEgghPx.png'))
plt.imshow(im)
plt.gray()
plt.show()

でもイケる

215 :デフォルトの名無しさん:2016/10/01(土) 13:59:29.48 ID:tpKY3oHI.net
ありがとうございます。

>>213
キラーンとなりました
>>214
元のモノクロで表示されました

白黒表示目的は>>214で達成できたのですが、>>213が気になります
x=11の列、y=11の列の値を511倍してそれぞれ列サイズ(28)、行サイズ(28)で割るとなぜキラーンとなるのでしょうか?
しかも全体の色味も変わって見えます

216 :デフォルトの名無しさん:2016/10/02(日) 13:38:37.38 ID:GX41vvMR.net
im2 = misc.toimage(im, cmin=0, cmax=511)
plt.imshow(np.uint32(im2))

と比べてごらん

217 :デフォルトの名無しさん:2016/10/02(日) 13:47:46.65 ID:GX41vvMR.net
あとこんなのでも行けるはず

def m(im):
..im[0][0] = 0
..im[len(im)-1][len(im[y])-1] = 511
..return im

(略)
im2 = misc.toimage(im, cmin=0, cmax=511)
plt.imshow(m(np.uint32(im2)))
(略)

218 :デフォルトの名無しさん:2016/10/04(火) 14:33:18.64 ID:ZPmHgmj0.net
こんなのでも逝ける

from scipy import misc

def mmm(im):
..for y in range(len(im)):
....for x in range(len(im[y])):
......im[y][x] = 511 - im[y][x]
..im[0][0] = 0
..im[len(im)-1][len(im[y])-1] = 511
..return im

(略)
im2 = misc.toimage(im, cmin=0, cmax=511)
plt.imshow(mmm(np.uint32(im2)))
(略)

219 :デフォルトの名無しさん:2016/10/09(日) 23:30:59.35 ID:xxl1bgNt.net
matplotlibで簡単なGUIのアプリケーションを自作しようと考えています
そこでボタンを押したときにキャンバスの中央に点がでるようなGUIを作成しようとしているのですが

from numpy.random import rand
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
fig = plt.figure()
ax = fig.add_subplot(111)
plt.subplots_adjust(bottom=0.2)

class Index(object):
def next(self, event):
xdata = event.xdata
ydata = event.ydata
plt.plot(0,0,color="red",marker="o")
plt.draw()

axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'circle')
bnext.on_clicked(Index().next)
plt.show()

サイトを参考に以上のように組んではいるのですが
ボタンを押した際ボタンの方の中央にプロットされてしまいます
これをキャンバスの方の中央にプロットするにはどのようにしたらよいでしょうか?

欲を言えばボタンを押した後に中央のキャンバス上でクリックした場所に赤い点を出したいです

220 :デフォルトの名無しさん:2016/10/10(月) 17:37:13.33 ID:Q436H0RN.net
>キャンバスの中央に点がでるような

class Index(object):
def __init__(self, ax):
self.ax = ax

def next(self, event):
xdata = event.xdata
ydata = event.ydata
self.ax.plot(0, 0, color="red", marker="o")
plt.draw()

(略)

bnext.on_clicked(Index(ax).next)

221 :デフォルトの名無しさん:2016/10/10(月) 17:44:14.43 ID:Q436H0RN.net
>キャンバス上でクリックした場所に垢移転

class Index(object):
def __init__(self, ax):
self.ax = ax

def next(self, event):
xdata = event.xdata
ydata = event.ydata
self.ax.plot(xdata, ydata, color="red", marker="o")
plt.draw()

(略)
axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
fig.canvas.mpl_connect('button_press_event', Index(ax).next)
(略)

#最初にクリックしたときだけ、どの場所クリックしても中央になるのは座標軸の方が変化するからっぽい。

222 :デフォルトの名無しさん:2016/10/10(月) 19:20:25.82 ID:cQ1gLyON.net
>>220 >>221
回答ありがとうございます
参考にして書いて見た結果ボタンを押した位置に応じた場所に点がでるようになりました
度々ですみませんが今度は
1度ボタンを押した後、大きいキャンバスのどこかを2度目のクリックをしたときそこに
1度だけ点がでるようにしたいです
ここからどう変えれば良いでしょうか?(イメージとしてはボタンを押すと,次のクリックの入力待ちになるイメージです


from numpy.random import rand
import matplotlib.pyplot as plt
from matplotlib.widgets import Button

fig = plt.figure()
ax = fig.add_subplot(111)
plt.subplots_adjust(bottom=0.2)

class Index(object):
def __init__(self, ax):
self.ax = ax

def next(self, event):
xdata = event.xdata
ydata = event.ydata
self.ax.plot(xdata, ydata, color="red", marker="o")
plt.draw()

axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
fig.canvas.mpl_connect('button_press_event', Index(ax).next)
bnext = Button(axnext, 'circle')
bnext.on_clicked(Index(ax).next)
plt.show()

223 :デフォルトの名無しさん:2016/10/11(火) 00:20:24.10 ID:7970w8cq.net
>>222 追加
聞いてばかりですみません、もう一つ聞きたいことがありまして
ボタンを2つにした場合には
fig.canvas.mpl_connectをどうつなげるべきなのでしょうか?

class Index1(object):
def __init__(self, ax):
self.ax = ax

def next(self, event):
xdata = event.xdata
ydata = event.ydata
self.ax.plot(xdata, ydata, color="red", marker="o")
plt.draw()

def prev(self, event):
xdata = event.xdata
ydata = event.ydata
self.ax.plot(xdata, ydata, color="blue", marker="o")
plt.draw()


axnext = plt.axes([0.81, 0.05, 0.1, 0.075])
axprev = plt.axes([0.11, 0.05, 0.1, 0.075])
fig.canvas.mpl_connect('button_press_event', Index(ax).???)
bnext = Button(axnext, 'red')
bnext.on_clicked(Index(ax).next)
bnext = Button(axprev, 'blue')
bnext.on_clicked(Index(ax).prev)

224 :デフォルトの名無しさん:2016/10/11(火) 13:31:18.69 ID:QeFd4z39.net
割とマジでレスするけど
>>220-221 が判らなかったのはともかく
それが解決してるのに >>222-223 が判らないっていうのは
相当知能に問題があるぞ
自分でできないなら向いてない
あきらめろ

225 :デフォルトの名無しさん:2016/10/11(火) 14:10:27.65 ID:7970w8cq.net
>>224
指摘していただきましてすみません
>>223の方は
クラスをもう一つ作り
fig.canvas.mpl_connect('button_press_event', Index(ax).next)
fig.canvas.mpl_connect('button_press_event', Index(ax).prev)
で解決しました.
こちらに関しては少し変えたりなどで試行せずに質問してしまっていたため
申し訳なく思います
ただ>>222の方が
http://retrofocus28.blogspot.jp/2012/07/matplotlib.html
こちらを組み合わせながら行っても上手くいかず
入力待ちの方法が思い浮かばなかったために質問させていただいております
もしよろしければもう少しお付き合いください

226 :デフォルトの名無しさん:2016/10/12(水) 10:22:57.21 ID:G/hcjkA/.net
>>225のものです
>>222について不器用な感じではありますがカウンターを用いて解決しました
ご迷惑をおかけしましてすみません

227 :デフォルトの名無しさん:2016/10/14(金) 15:42:20.46 ID:z5IC4QPv.net
グラフ描画機能は
matplotlibとRのggplot2は
どっちが優れてますか?

228 :デフォルトの名無しさん:2017/03/11(土) 11:10:15.21 ID:qCTmGWaI.net
pandas使ったらさあ、ちょっと前なのにパラメータがrows, colsからindexとcolumnに変わってたりと
大して意味のない気まぐれな変更多くて修正めんどくさくて大変だった
いったん決めたインターフェースは簡単に変えるなよ

229 :デフォルトの名無しさん:2017/03/11(土) 11:37:03.12 ID:JsoExgwj.net
>>228
2日越しのマルチ乙

230 :デフォルトの名無しさん:2017/05/05(金) 14:10:16.42 ID:hoK7VIFg.net
すみません、
テラタームでログインして、サーバ上でPythonを触っているのですが、

その場合、Matplotlibで作成したグラフはどのようにしたら表示できますか?

231 :デフォルトの名無しさん:2017/05/05(金) 15:29:08.61 ID:E/UcmmKD.net
sshでXのportforwardとかかな

232 :デフォルトの名無しさん:2017/05/05(金) 15:34:23.95 ID:hoK7VIFg.net
>>231
portforwardといいますと?

233 :デフォルトの名無しさん:2017/07/20(木) 19:10:48.26.net
ssh

234 :デフォルトの名無しさん:2017/11/10(金) 19:10:16.21 ID:81bW6/qw.net
一番簡単なのはjupyter notebook使うことだね。

235 :デフォルトの名無しさん:2018/03/31(土) 19:51:41.75 ID:RRMYNfyR.net
3D版のScatterでvmax指定が効かないな…
zticksも存在しないし
透明の点をプロットして拡げるしかないのか

236 :デフォルトの名無しさん:2018/05/23(水) 19:58:38.64 ID:Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

UWPF3

237 :デフォルトの名無しさん:2018/07/05(木) 01:40:39.11 ID:RfoszcD2.net
XAO

238 :デフォルトの名無しさん:2019/04/01(月) 18:19:51.64 ID:zbbYcLmt.net
今は jupyter labやな

239 :デフォルトの名無しさん:2019/05/23(木) 10:35:23.92 ID:eybwZjzY.net
matplotlib.plot にも sympy.geometory にも Polygon ってあるのな。
これをお互いに変換するのはどうしたらよいの? sympy からplot で良い。
sympy.geometry
Polygon(Point2D(94, 31), Point2D(388, 157), Point2D(472, 199), Point2D(850, 598), Point2D(787, 897), Point2D(110, 927))
matplotlib.plot
Polygon( [[ 94 31],[990 31],[990 927], [ 94 927]]) # np.array

240 :デフォルトの名無しさん:2019/05/23(木) 19:05:18.50 ID:KLPLdAni.net
g = Polygon(Point2D(94, 31), Point2D(388, 157), Point2D(472, 199), Point2D(850, 598), Point2D(787, 897), Point2D(110, 927))
matplotlib.pyplot.Polygon(np.array(list(map(np.array, g.vertices))))

241 :デフォルトの名無しさん:2019/05/24(金) 15:20:24.68 ID:MR3FxfYE.net
>>240 ありがとう。 なんとかかんとか自力でゴリゴリ変換してみてた。 参考にさせてもらいます。

242 :デフォルトの名無しさん:2019/05/24(金) 15:39:14.64 ID:/7dQNzPT.net
g = Polygon(Point2D(94, 31), Point2D(388, 157), Point2D(472, 199), Point2D(850, 598), Point2D(787, 897), Point2D(110, 927))
matplotlib.pyplot.Polygon(g.vertices)

これでええわ

243 :デフォルトの名無しさん:2019/05/27(月) 14:09:07.82 ID:g1o9JmK9.net
>>242 matplotlib ではPoint2Dは扱えないからダメでしょ。

hxy = np.array(list([i.x,i.y] for i in g.vertices))
とPoint2D(x,y) から (x,y) を取り出す必要がある。

つまり
g = Polygon(Point2D(94, 31), Point2D(388, 157), Point2D(472, 199), Point2D(850, 598), Point2D(787, 897), Point2D(110, 927))
matplotlib.pyplot.Polygon(np.array(list([i.x,i.y] for i in g.vertices)) )

244 :デフォルトの名無しさん:2019/05/27(月) 14:14:45.58 ID:eCbLD3a7.net
うそはいかん
うちでは
ax.add_patch(matplotlib.pyplot.Polygon(g.vertices))
で動いてる

245 :デフォルトの名無しさん:2019/05/30(木) 09:30:54.81 ID:+xWYr2/c.net
>>244 ごめんごめん、今のバージョンと古いバージョンの両方を使ってて、古い方で通らなかったから通らないものとして作ってた。
これで行けると色んな場面で楽になるな。

246 :デフォルトの名無しさん:2019/05/30(木) 13:10:41.17 ID:Ec3P7Zkh.net
Mathematica Walfram|Alpha engine オプソなら無料に
https://forest.watch.impress.co.jp/docs/news/1186454.html
https://www.wolfram.com/engine/

247 :デフォルトの名無しさん:2019/06/08(土) 17:05:27.12 ID:e9TBdBJ9.net
初心者で申し訳ないのですが、ここにいる天才達に質問です
マットプロットリブでリアルタイムの棒グラフの作成って可能ですか?

248 :デフォルトの名無しさん:2019/06/08(土) 17:27:21.35 ID:C/YlT49t.net
OK

249 :デフォルトの名無しさん:2019/06/15(土) 16:48:07.34 ID:aVo2U987.net
matplotlibでリアルタイムはクソ遅いので、用途次第だと思う

250 :デフォルトの名無しさん:2019/06/15(土) 17:49:04.18 ID:NPtNfhdj.net
Matplotlib&Seaborn実装ハンドブック
4798055433

251 :デフォルトの名無しさん:2019/06/17(月) 11:58:06.21 ID:hKpTfRM+.net
>>249
そうなんですね。遅いのですか・・・
それならリアルタイムグラフを作成するのにおすすめの物ってなんですか?

252 :デフォルトの名無しさん:2019/06/17(月) 12:01:09.95 ID:hKpTfRM+.net
https://inagoflyer.appspot.com/btcmac
↑このようなものを自分なりにもっと見やすくわかりやすく作りたいのですがおすすめってどのようなものですか?教えていただけると助かります。

253 :デフォルトの名無しさん:2019/06/17(月) 12:07:53.67 ID:D4rpPP9R.net
特定用途に特化したものなら
自分で描いた方が速い

254 :デフォルトの名無しさん:2019/06/17(月) 12:24:46.31 ID:hKpTfRM+.net
>>253
なるほど。
プログラム初心者なんで教えてほしいのですが、自分でコードを書いてからどこに作成したコードを張り付ければ
このようなグラフが出てくるようになるのですか?

71 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★