『プログラミング言語 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 でグラフを描画する』 を参照してください。
↑マウスでドラッグしたりカーソルキーを押すと3Dグラフが回転します。マウスホイールを回すと拡大・縮小ができます。
GLLinePlot.jl(C:\julia-0.2.1-win32\binに保存すること)
# -*- 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:\julia-0.2.1-win32\binに保存すること)
# -*- 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_()