1
ここでは例として標準的なmatplotlibのsurfaceplotを使用しています。3D表面/等高線の投影された最小値と最大値のマーク
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)][1]][1]
Iは、輪郭上のそれぞれの位置の「X」を用いて表面の2つの極値をマークしたいです。 これはどのように達成できますか?
私が試した:
max_column = np.argmax(np.max(Z, axis=0))
max_row = np.argmax(np.max(Z, axis=1))
min_column = np.argmin(np.min(Z, axis=0))
min_row = np.argmin(np.min(Z, axis=1))
target = [max_row,max_column,0]
ax.plot([target[0]],[target[1]],[0],'r',marker = u'X',markersize = 8)
私は何とか投影座標を必要とすると思います。
さらに、極値がある2D平面上に線でヘアラインクロスを描きたいと思います。