将颜色映射应用于mpl_toolkits.mplot3d.Axes3D.bar3d

6
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)

请注意以下几点:

3

"colors" 在赋值之前被引用。 - diffracteD
颜色必须被导入,import matplotlib.colors as colors - lanery
您在哪里定义dz?dz读起来像微分,它是z方向的间隔距离吗? - rhody
缺少导入matplotlib.cm as cm。 - rhody
对于那些不知道如何使用这段代码的人,这个想法是将此代码插入到以下示例中:http://matplotlib.org/examples/pylab_examples/hist_colormapped.html - rhody

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()

enter image description here


我希望实现类似于 cmap = cm.jet 的行为,但是对于 bar3d 来说似乎没有这样的选项。我编辑了我的问题以澄清这一点。 - Ferguzz
这个答案对于这里所提出的问题而言没有用处(它根本没有涉及到条形图),最好将其删除。 - ImportanceOfBeingErnest
虽然你说的没错,但是这个答案恰好解决了我想要做的事情,所以我认为最好还是保留它 :)。 - Schach21

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接