6

配列を受け入れて個々のバーを異なる色に着色できるAxes3Dのbar3d関数には「color」引数がありますが、たとえば、plot_surface関数と同じ方法でカラーマップ(つまり、cmap = cm.jet)を適用するにはどうすればよいですか?これにより、特定の高さのバーがその高さを反映する色になります。

http://matplotlib.sourceforge.net/examples/mplot3d/hist3d_demo.html

http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/api.html

4

3 に答える 3

7

Ferguzzが提供した回答に続いて、より完全で最新のソリューションを次に示します。

import matplotlib.colors as colors
import matplotlib.cm as cm


dz = height_values
offset = dz + np.abs(dz.min())
fracs = offset.astype(float)/offset.max()
norm = colors.Normalize(fracs.min(), fracs.max())
color_values = cm.jet(norm(fracs.tolist()))
ax.bar3d(xpos,ypos,zpos,1,1,dz, color=color_values)

次の点に注意してください。

  • https://matplotlib.org/examples/pylab_examples/hist_colormapped.htmlのコードと同様に、すべての変数(xpos、yposなど)を定義する必要があります。

  • normalize()はNormalize()になりました

  • fracsは(パンダからの)タイプシリーズであり、リストに変換する必要があります

于 2018-08-07T15:53:34.077 に答える
3

これが私の解決策です:

offset = dz + np.abs(dz.min())
fracs = offset.astype(float)/offset.max()
norm = colors.normalize(fracs.min(), fracs.max())
colors = cm.jet(norm(fracs))

ax.bar3d(xpos,ypos,zpos,1,1,dz, color=colors)

最初の行は、データが負になる場合にのみ必要です。

ここから適応したコードhttp://matplotlib.sourceforge.net/examples/pylab_examples/hist_colormapped.html

于 2012-08-14T13:26:06.717 に答える
2

カラー配列をfacecolors引数に渡すことができ、サーフェス内のすべてのパッチに色を設定できます。

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
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)
colors = np.random.rand(40, 40, 4)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors,
        linewidth=0, antialiased=False)
ax.set_zlim(-1.01, 1.01)

ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))

plt.show()

ここに画像の説明を入力してください

于 2012-08-14T12:45:53.680 に答える