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
答案 0 :(得分:3)
按照Ferguzz提供的答案,这是一个更完整/最新的解决方案:
this.gateway.paymentMethod.delete(response.paymentMethod.token);
请注意以下几点:
您应该定义所有变量(例如xpos,ypos),类似于https://matplotlib.org/examples/pylab_examples/hist_colormapped.html
normalize()现在是Normalize()
fracs是Series类型(来自熊猫),必须转换为列表
答案 1 :(得分:2)
这是我的解决方案:
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。
答案 2 :(得分:0)
您可以将颜色数组传递给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()