『プログラミング言語 Julia でグラフを描画する』 でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
今回は『おっぱい曲面方程式による長さ計算』を参考にして「おっぱい」を大きくする実験をしてみた。
Julia で求めた計算結果を Matplotlib でグラフ表示するようになっている。(環境を作って是非動かしてみてください)
- ソースコードを保存する際には文字エンコーディングは utf-8 にしておくこと。
- サンプルを起動するには、Oppai2.jl (Julia のソースコード) をエクスプローラーからダブルクリックする。
- ソースコード内の ALPHA を大きくすると「おっぱい」が大きくなります。BETA を大きくすると「乳首」が伸びます。
- カレントディレクトリに「Oppai2.png」というファイルができます。
注記:環境構築については、『プログラミング言語 Julia でグラフを描画する』 を参照してください。
2014/07/04 に手順 4, 6, 11 を追加しました。**2014/07/04 以前に上記記事を見て環境を構築した方は手順 4, 6, 11 を追加実行してください。**よろしくお願いします。
↓$ALPHA=1$の例。「おっぱい」は小さい。左ボタンドラッグすると3Dグラフが回転します。右ボタンドラッグすると拡大・縮小ができます。
↓$ALPHA=3$の例。「おっぱい」は大きい。左ボタンドラッグすると3Dグラフが回転します。右ボタンドラッグすると拡大・縮小ができます。
Oppai2.jl
# -*- coding: utf-8 -*-
using PyPlot
using PyCall
@pyimport matplotlib.cm as cm
@pyimport matplotlib.font_manager as fm
@pyimport matplotlib.pyplot as plt
@pyimport numpy as np
ALPHA = 1.0
BETA = 1.0
GAMMA = 1.0 / ALPHA
function bust(x, y)
ALPHA * (6 * exp(-((2 / 3 * abs(x) - 1) ^ 2 + (2 / 3 * y) ^ 2) - 1 / 3 * (2 / 3 * y + 0.5) ^ 3)
+ BETA * 2 / 3 * exp(-2.818 ^ 11 * ((abs(2 / 3 * x) - 1) ^ 2 + (2 / 3 * y) ^ 2) ^ 2)
- GAMMA * (2 / 3 * x) ^ 4) / 8
end
fig = plt.figure()
ax = fig[:gca](projection="3d")
nx = 201
ny = 201
x = linspace(-3, 3, nx)
y = linspace(-3, 3, ny)
z = zeros(Float64, length(y), length(x))
for iy = 1:length(y)
for ix = 1:length(x)
z[iy, ix] = bust(x[ix], y[iy])
end
end
x, y = np.meshgrid(x, y)
sf = ax[:plot_surface](x, y, z, rstride=4, cstride=4, cmap=cm.coolwarm, linewidth=0.1, antialiased=true)
fig[:colorbar](sf, shrink=0.5, aspect=5)
ax[:set_zlim](-4, 3)
ax[:view_init](0, -90)
@windows? (
begin
#fp = fm.FontProperties(fname="C:\\WINDOWS\\Fonts\\msgothic.ttc")
fp = fm.FontProperties(fname="C:\\WINDOWS\\Fonts\\msmincho.ttc")
plt.title("Julia+Matplotlib サンプル", fontproperties=fp, fontsize=25)
end
: begin
plt.title("Julia+Matplotlib サンプル", fontsize=25)
end
)
plt.savefig("Oppai2")
plt.show(block=true)