Python: PyQtGraph についての備忘録

Matplotlib よりも描画が高速らしい PyQtGraph を試してみたのでメモ。

あとついでなので、odeint で 2 階常微分方程式を 1 階の連立方程式にして解いてみました。
丸善出版の MATLAB と Octave による科学技術計算 にあった三体問題を Python で実装し、結果を PyQtGraph でプロットしています。

Pyqtgraph の使い方は Qiita の記事:Julia + PyQtGraph でグラフを描画する(2)を参考にさせて貰いました。
CurveArrow でカーブに沿って矢印を簡単に動かせるのがいいですね。
確かに Matplotlib よりアニメーションの表示が重くない感じがするので、しばらく PyQtGraph も使ってみようと思います。

import numpy as np
from scipy.integrate import odeint
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore

def threebody(x, t):
    f = [0]*len(x)
    Ms = 330000
    Me = 1
    Mm = 0.1
    D1 = ((x[4]-x[0])**2+(x[6]-x[2])**2)**(3/2)
    D2 = (x[0]**2+x[2]**2)**(3/2)
    f[0] = x[1]
    f[1] = 4*np.pi**2*(Me/Ms*(x[4]-x[0])/D1-x[0]/D2)
    f[2] = x[3]
    f[3] = 4*np.pi**2*(Me/Ms*(x[6]-x[2])/D1-x[2]/D2)
    D2 = (x[4]**2+x[6]**2)**(3/2)    
    f[4] = x[5]
    f[5] = 4*np.pi**2*(Mm/Ms*(x[0]-x[4])/D1-x[4]/D2)
    f[6] = x[7]
    f[7] = 4*np.pi**2*(Mm/Ms*(x[2]-x[6])/D1-x[6]/D2)
    return f

v0 = [1.52, 0, 0, -4.6, 1, 0, 0, -5.1]
t = np.arange(0, 5, 0.01)

v = odeint(threebody, v0, t)

pg.setConfigOptions(antialias=True)
pg.setConfigOption('background', (255, 255, 255))
plt = pg.plot()
plt.addLegend()
plt.resize(500,500)
plt.showGrid(x=True, y=True)

curve1 = plt.plot(v[:, 0], v[:, 2], pen="r", name="Mars")
curve2 = plt.plot(v[:, 4], v[:, 6], pen="b", name="Earth")

arrow1 = pg.CurveArrow(curve1)
arrow1.setStyle(headLen=20)
plt.addItem(arrow1)
anim1 = arrow1.makeAnimation(loop=-1)

arrow2 = pg.CurveArrow(curve2)
arrow2.setStyle(headLen=20)
plt.addItem(arrow2)
anim2 = arrow2.makeAnimation(loop=-1)

anim1.start()
anim2.start()

15061801.gif

個人的課題

  • ob-ipython だとフリーズする(ob-python だと問題ない)
  • CurvePoint のスタイルの変え方がわからない
  • 動画で保存する方法がわからない(まあこれは byzanz で gif にすればいいか)

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share