LoginSignup
4
6

More than 5 years have passed since last update.

Julia + PyQtGraph でグラフを描画する(1)

Last updated at Posted at 2014-07-01

『プログラミング言語 Julia でグラフを描画する』 でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
単純な関数のグラフとアローアニメーションのサンプルを作ってみた。例によって、Julia で求めた計算結果を PyQtGraph でグラフ表示するようになっている。(環境を作って是非動かしてみてください)

  • ArrowSample.jl (Julia のソースコード)は、Python のソース内の graph_run() という関数に配列を渡す。グラフの描画は Python にお任せ。$ y=x^2 $ と $ y=2x+50 $ の $ y $ を $ -10≦x≦10 $ の範囲で計算する($ x $ は 0.1 刻み)。
  • ArrowSample.py (Python のソースコード)では、Julia から渡された配列を基に折れ線グラフを描画する。
  • PyCall を用いて Python のコードを呼び出す際には、C:\julia-0.2.1-win32\bin がロードパスに含まれるので、ArrowSample.jl および ArrowSample.py の両方共を C:\julia-0.2.1-win32\bin 配下に保存しておくこと。
  • ソースコードを保存する際には文字エンコーディングは utf-8 にしておくこと。
  • サンプルを起動するには、ArrowSample.jl (Julia のソースコード) をエクスプローラーからダブルクリックします。

注記:環境構築については、『プログラミング言語 Julia でグラフを描画する』 を参照してください。

arrow.gif

ArrowSample.jl(C
# -*- coding: utf-8 -*-

using PyCall

@pyimport ArrowSample
x  = [ -10 : 0.1 : 10 ]
y1 = [ x[i]*x[i] for i=1:length(x) ]
y2 = [ x[i]*2+50 for i=1:length(x) ]
ArrowSample.graph_run(x, y1, y2)
ArrowSample.py(C
# -*- coding: utf-8 -*-

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

def graph_run(plot_data_x, plot_data_y1, plot_data_y2):

    app = QtGui.QApplication([])

    win = pg.GraphicsWindow(title=u"Julia+PyQtGraph サンプル")
    win.resize(400,300)

    # Enable antialiasing for prettier plots
    pg.setConfigOptions(antialias=True)

    p1 = win.addPlot(title=u"アロー アニメーション")
    c1 = p1.plot(x=plot_data_x, y=plot_data_y1)
    c2 = p1.plot(x=plot_data_x, y=plot_data_y2)
    p1.showGrid(x=True, y=True)

    a1 = pg.CurveArrow(c1)
    p1.addItem(a1)
    anim1 = a1.makeAnimation(loop=-1)
    anim1.start()

    a2 = pg.CurveArrow(c2)
    p1.addItem(a2)
    anim2 = a2.makeAnimation(loop=-1)
    anim2.start()

    app.exec_()
4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6