matplotlib
を使用して、カラーマップ、ワイヤーフレーム、コンターで表面をプロットしたいと思います。このようなもの:
Xyに平行な平面にある輪郭ではなく、画像内の3Dおよび白の輪郭について質問していることに注意してください。
単純な方法でこれらすべてのものをプロットすると、等高線が見えなくなります(下のコードと画像を参照)。
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
サーフェイスファセットに透明度を追加すると、輪郭が表示されますが、実際に雑然として見えます(以下のコードと画像を参照)。
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1, alpha=0.5)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
質問:matplotlib
でこの結果を取得する方法はありますか?ただし、陰影は必要ありません。
どうやらこれはバグです
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0, rstride=1, cstride=1)
ax.contour(X, Y, Z+1, 10, lw=3, colors="k", linestyles="solid")
plt.show()
周りを回転させると、不必要なときに等高線が消えます。
オフセットを輪郭に設定したいと思います。
ax.contour(X, Y, Z, 10, offset=-1, lw=3, colors="k", linestyles="solid", alpha=0.5)
詳細については、この例を参照してください。
http://matplotlib.org/examples/mplot3d/contour3d_demo3.html
そして、ここのドキュメント:
http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#contour-plots
オフセット:指定された場合、zdirに垂直な平面内のこの位置に等高線の投影をプロットします
注意、 zdir = 'z'
はデフォルトですが、xまたはy方向に投影して、それに応じてzdir
を設定できます。