3次元の曲線をプロット
プロットするデータはこれ
Notebook
import numpy as np
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)
Matplotlib
Notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d # <- 明示的には使わないが、インポートしておく必要がある。
# Notebook出力には次の1行が必要(%matplotlib inlineだとグラフを回転できない)
%matplotlib notebook
fig = plt.figure()
ax = fig.gca(projection='3d') # <- axes3dをインポートしていないとエラーになる。
ax.plot(x, y, z)
plt.show()
![3D曲線_Matplotlib.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fb4b4db96-fa14-fe63-da8c-9c2704cc38a7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f7980d7038549437ada64654e39cb8e7)
Plotly
Notebook
from plotly.graph_objs import Scatter3d
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode() # <- Notebook出力にはこの1行が必要
scatter = Scatter3d(x=x, y=y, z=z, mode='lines')
iplot([scatter]) # <- Notebookに出力するにはiplot関数を使う
![3D曲線_Plotly.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2F31ac93bb-857e-24ca-dea8-8580753b3c6d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2fa88aef760d4753eed5544b0d569919)
Mayavi
Notebook
from mayavi import mlab
mlab.init_notebook() # <- Notebook出力にはこの1行が必要
mlab.figure()
mlab.plot3d(x, y, z, tube_radius=0.1) # tube_radiusは線の太さ(省略可)
![3D曲線_Mayavi.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fc234e055-5df5-3bfb-4c77-15bb3591b9d6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=f9fb7f868a84ba596a87d6e8a1b8b02d)
3次元の散布図をプロット
プロットするデータはこれ
Notebook
import numpy as np
X = np.random.uniform(-10, 10, 200)
Y = np.random.uniform(-10, 10, 200)
Z = np.random.uniform(-10, 10, 200)
Matplotlib
Notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d # <- 明示的には使わないが、インポートしておく必要がある。
# Notebook出力には次の1行が必要(%matplotlib inlineだとグラフを回転できない)
%matplotlib notebook
fig = plt.figure()
ax = fig.gca(projection='3d') # <- axes3dをインポートしていないとエラーになる。
scatter = ax.scatter3D(X, Y, Z,
s=5, # マーカーのサイズ
c=Z, # 色分けに使う数値(任意の数値を指定可)
cmap=plt.cm.viridis) # 色のパターン
plt.colorbar(scatter) # カラーバーを表示(省略可)
plt.show()
![3D散布図_Matplotlib.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fdc93a5b7-fc6d-a1d5-17e1-ce7260879348.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=400f6c8110c1d846b772d25b617b570f)
Plotly
Notebook
from plotly.graph_objs import Scatter3d
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode() # <- Notebook出力にはこの1行が必要
# color、colorscale、showscaleは省略可
scatter = Scatter3d(x=X, y=Y, z=Z, mode='markers',
marker=dict(size=1, # マーカーのサイズ
color=Z, # 色分けに使う数値(任意の数値を指定可)
colorscale='Viridis', # 色のパターン
showscale=True) # カラーバーを表示
)
iplot([scatter]) # <- Notebookに出力するにはiplot関数を使う
![3D散布図_Plotly.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fba8779f6-8e6e-a661-104e-9d8459b8dda2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7b25ee37c038b3ba6517806a67c09e7f)
Mayavi
Notebook
from mayavi import mlab
mlab.init_notebook() # <- Notebook出力にはこの1行が必要
mlab.figure()
mlab.points3d(X, Y, Z,
Z, # 色分けに使う数値(任意の数値を指定可)
scale_mode='none', # マーカーを同じサイズで表示
scale_factor=0.5, # マーカーのサイズ
colormap='viridis') # 色のパターン
![3D散布図_Mayavi.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fd18a5722-fd68-0a0f-d838-1220b7bf55c3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3013298a92ef1b434a46949a99cf17a5)
格子状に並んだ2.5次元データをプロット
プロットするデータはこれ
Notebook
from mpl_toolkits.mplot3d.axes3d import get_test_data
X, Y, Z = get_test_data()
Matplotlib
Notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d # <- 明示的には使わないが、インポートしておく必要がある。
# Notebook出力には次の1行が必要(%matplotlib inlineだとグラフを回転できない)
%matplotlib notebook
fig = plt.figure()
ax = fig.gca(projection='3d') # <- axes3dをインポートしていないとエラーになる。
ax.plot_surface(X, Y, Z,
cmap=plt.cm.viridis) # 色のパターン(省略可)
plt.show()
![3Dサーフェス_Matplotlib.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2F95cf536b-6924-c087-3a61-17a3952ea52d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=43078ad687e69dc654e3ac3105f908fc)
Plotly
Notebook
from plotly.graph_objs import Surface
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode() # <- Notebook出力にはこの1行が必要
surface = Surface(x=X, y=Y, z=Z,
colorscale='Viridis') # 色のパターン(省略可)
iplot([surface]) # <- Notebookに出力するにはiplot関数を使う
![3Dサーフェス_Plotly.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Ff30b2ece-953e-f6d5-4213-05144cbd5370.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=3bc9f50c75ec0e81b69f130ad6e71226)
Mayavi
Notebook
from mayavi import mlab
mlab.init_notebook() # <- Notebook出力にはこの1行が必要
mlab.figure()
mlab.surf(Z,
colormap='viridis', # 色のパターン
warp_scale='auto') # Z軸のスケールを自動的に調整する
![3Dサーフェス_Mayavi.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2Fce97352c-4faf-560e-f1de-2b5b58f33219.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=79fa700d8923344d24333d7921b1fbb5)
不規則に並んだ2.5次元データをプロット
プロットするデータはこれ
Notebook
import numpy as np
X = np.random.uniform(-10, 10, 1000)
Y = np.random.uniform(-10, 10, 1000)
Z = X ** 2 + Y ** 2
Matplotlib
Notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d # <- 明示的には使わないが、インポートしておく必要がある。
# Notebook出力には次の1行が必要(%matplotlib inlineだとグラフを回転できない)
%matplotlib notebook
fig = plt.figure()
ax = fig.gca(projection='3d') # <- axes3dをインポートしていないとエラーになる。
ax.plot_trisurf(X, Y, Z, cmap=plt.cm.viridis) # cmapは色のパターン(省略可)
plt.show()
![3Dメッシュ_Matplotlib.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2F0599c84c-d5b3-3630-0e95-78e286414d20.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=34a10ffb86d725db0aa4d27eb0f0ebc8)
Plotly
Notebook
from plotly.graph_objs import Mesh3d
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode() # <- Notebook出力にはこの1行が必要
mesh = Mesh3d(x=X, y=Y, z=Z,
delaunayaxis='z') # 三角形分割する時に投影する方向
iplot([mesh]) # <- Notebookに出力するにはiplot関数を使う
![3Dメッシュ_Plotly.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F37701%2F8431811e-4cf9-96ca-1854-5d8ae0d8c7a4.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=21a720715db33e6bac32030bf29df0af)
参考リンク
Jupyter notebookでMayaviを使う時の設定 - Qiita
Pythonの可視化パッケージの使い分け - Qiita
なんでもかんでもJupyter Notebookに表示するためのチートシート 2次元プロット編 - Qiita