LoginSignup
6
7

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-03

『プログラミング言語 Julia でグラフを描画する』 でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
3D空間にグラフを描画するサンプルを作ってみた。(PyQtGraphのサンプルを参考にして、計算処理部分を Julia 側に移植しました)
例によって、Julia で求めた計算結果を PyQtGraph でグラフ表示するようになっている。(環境を作って是非動かしてみてください)

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

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

2014-0704-0623.png
↑マウスでドラッグしたりカーソルキーを押すと3Dグラフが回転します。マウスホイールを回すと拡大・縮小ができます。

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

using PyCall

nx = 100
ny = 51
x = linspace(-10, 10, nx)
y = linspace(-10, 10, ny)
z = zeros(Float64, length(x), length(y))

for iy = 1:length(y)
    for ix = 1:length(x)
        d = (x[ix]^2 + y[iy]^2)^0.5
        z[ix, iy] = 10 * cos(d) / (d+1)
    end
end

@pyimport GLLinePlot
GLLinePlot.graph_run(x, y, z)
GLLinePlot.py(C
# -*- coding: utf-8 -*-

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import pyqtgraph as pg
import numpy as np

def graph_run(plot_data_x, plot_data_y, plot_data_z):

    app = QtGui.QApplication([])

    w = gl.GLViewWidget()
    w.resize(600,400)
    w.opts['distance'] = 40
    w.show()
    w.setWindowTitle(u'Julia+PyQtGraph サンプル')

    x = plot_data_x
    y = plot_data_y
    for i in range(len(y)):
        yi = [y[i]]*len(x)
        z = plot_data_z[:,i]
        pts = np.vstack([x,yi,z]).transpose()
        plt = gl.GLLinePlotItem(pos=pts, color=pg.glColor((i,len(y)*1.3)), width=(i+1)/10., antialias=True)
        w.addItem(plt)

    app.exec_()
6
7
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
6
7