3Dの座標値を出力する|Python
Pythonで3D表現をしてみた
2Dでのグラフ表示をしてみたので、今度は3D表示を試みてみた。
使用したのは
・MacOS
・PyCharm(エディタ)
・numpy
・matplotlib
・mpl_toolkits
以上を使用します。
空間二次関数のグラフ
X-Yビューでは1ずつ増やして
X座標 × Y座標 = Z座標 となるように表現してみました。
ではサンプルコードです。
# Numpy, Matplotlib
# mpl_toolkits.mplot3d を使って3D座標をプロット
# --- 2020.06.16 ProOJI ---
# --- No.1 ---
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# (x, y, z) 座標を作成
x = [i for i in range(21)]
y = [i for i in range(21)]
z = []
for i in range(21):
z.append(i*i)
# 3Dでプロット
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(x, y, z, "o-", color="red", ms=4, mew=0.5)
# 軸ラベル
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# 表示
plt.show()
空間サイクロン
・サンプルコード 2
#
# Numpy, Matplotlib
# mpl_toolkits.mplot3d を使って3D座標をプロット
# --- 2020.06.16 ProOJI ---
# --- No.2 ---
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection='3d')
# x, y, z成分のデータの作成
theta = np.linspace(-4*np.pi, 4*np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, color='blue')
ax.scatter(x, y, z, color='blue')
plt.show()
空間サーフェイス
ちょっときれいなグラフも工夫次第でこんなふうにできてしまいます。
・サンプルコード 3
# Numpy, Matplotlib
# mpl_toolkits.mplot3d を使って3D座標をプロット
# --- 2020.06.16 ProOJI ---
# --- No.3 ---
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(111, projection='3d')
# x, y, z成分のデータの作成
x = np.arange(-5, 5, 0.25)
y = np.arange(-5, 5, 0.25)
x, y = np.meshgrid(x, y)
r = np.sqrt(x**2 + y**2)
z = np.sin(r)
# 面データを作成します
surf = ax.plot_surface(x, y, z, cmap=plt.cm.coolwarm,
linewidth=0, antialiased=False)
# z軸の設定
ax.set_zlim(-1.01, 1.01)
# カラーバーの表示
fig.colorbar(surf, shrink=0.5, aspect=10)
plt.show()
まとめ
2Dでできることがそのまま3DでできてしまうPythonはあっぱれ!
同時にPythonの文法のみに詳しいだけでは足らず
やはりライブラリやフレームワークの知識はしっかりしていないと
と思えたこのたびでした。
・情報ソース
Mpl_toolkitsについて
Author And Source
この問題について(3Dの座標値を出力する|Python), 我々は、より多くの情報をここで見つけました https://qiita.com/ProOJI/items/0553afc0899adf8e6b5c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .