簡単な解決策が必要な簡単なタスクがありますが、私は何日も試しています。具体的にしようと思います。
matplotlibのmplot3dとplot_surfaceを使用してサーフェスをプロットしようとしています。データセット「z」の表面をプロットし、カラーマップを特定の最大値にスケーリングしようとすると、「vmax」プロパティをこの値に変更します。それはうまくいきます。
1つのデータセット(z)の表面をプロットし、2番目のデータセット(fc)の面色を使用しようとすると、これも正常に機能します。
フェイスカラーのカラーマップを拡大縮小したい場合、vmaxプロパティはフェイスカラー値によって無効にされます。したがって、Vmaxは効果がありません(試行1)。線も消えましたが、それは別の問題です。
また、facecolorデータセット(fc)の値を変更しようとしても、目的の効果が得られませんでした(attempt2)。
スケーリングされたカラーマップ(下の「スケーリングされた」の図のように)を使用して、z値ではなく、顔の色にスケーリングされた図を取得しようとしています。
以下のコードは私が今持っているものであり、結果は次のようになります。
誰かが私がここで欠けているものを知っていますか?どんな考えでも大歓迎です!
import pylab as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.ion()
# creating dataset
profile = np.arange(20)**2
z = profile.repeat(20).reshape(20,20)
fc= np.rot90(z.copy())
x = np.arange(z.shape[0])
y = np.arange(z.shape[1])
X, Y = np.meshgrid(x,y)
# plotting
vmax = 100
fig = plt.figure()
ax = fig.add_subplot(1,4,1, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1)
ax.set_title('normal')
ax = fig.add_subplot(1,4,2, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1, vmax=vmax)
ax.set_title('scaled')
ax = fig.add_subplot(1,4,3, projection='3d', azim=210)
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1, vmax=vmax)
ax.set_title('rotated (attempt1)')
ax = fig.add_subplot(1,4,4, projection='3d', azim=210)
fc[fc> vmax] = vmax
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1)
ax.set_title('rotated (attempt2)')