いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Pythonで3Dの散布図、グラフを描く

 そろそろ「複数枚の写真から立体を再現」を実験してみたいと考えています。そのために必要そうなコードを整理しておきます。立体の散布図です。与えられた3次元の点をプロットします。次に(x,y)から式を使ってzを計算し、空間内の点を求めてプロットしてみます。matplotlibというライブラリがあり、これを使えば簡単に描けます。

#====================
#最低限の3D散布図の描き方
#
import sys
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
#add_subplotの最初の3つの引数は通常なら「1,1,1」でよい
ax = fig.add_subplot(1,1,1, projection='3d')
#(1,1,1),(2,8,5),……に点を打つ
x = [1, 2, 3, 4, 5]
y = [1, 8, 3, 6, 5]
z = [1, 5, 3, 8, 9]
ax.scatter(x, y, z)
plt.show()
sys.exit()
#====================
#立体グラフ
#
import sys
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import math
import numpy as np
#-----------------------
def f(x, y):
    return np.sin(math.pi*x*0.05)
#-----------------------
#xy平面にメッシュを作る。1.5は刻み。
x, y = np.mgrid[-20:20:1.5, -20:20:1.5]
z = f(x, y)
fig1 = plt.figure(figsize=(10, 10))
#add_subplotの最初の3つの引数は通常なら「1,1,1」でよい
ax = fig1.add_subplot(1,1,1, projection="3d")
ax.set_title("graph title")
ax.scatter(x, y, z)
plt.show()
sys.exit()
#====================

f:id:Inuosann:20191229124839p:plain:w400
 調べると日本語のフォントを使うのには少し作業が要るようです。軸にコメントをつけるときなど日本語がいいこともありますが、今回はとりあえず「最小限のコードで」ということでここまでとします。