Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将颜色映射应用于mpl_toolkits.mplot3d.Axes3D.bar3d_Python_Plot_Matplotlib - Fatal编程技术网

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

Python 将颜色映射应用于mpl_toolkits.mplot3d.Axes3D.bar3d,python,plot,matplotlib,Python,Plot,Matplotlib,Axes3D的bar3d函数有一个“color”参数,它可以接受数组为各个条带不同颜色的颜色-但是我如何以与plot_曲面函数相同的方式应用颜色贴图(例如,cmap=cm.jet)?这将使某个高度的条形成为反映其高度的颜色 您可以将颜色数组传递给facecolors参数,它可以为曲面中的每个面片设置颜色 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import

Axes3D的bar3d函数有一个“color”参数,它可以接受数组为各个条带不同颜色的颜色-但是我如何以与plot_曲面函数相同的方式应用颜色贴图(例如,cmap=cm.jet)?这将使某个高度的条形成为反映其高度的颜色


您可以将颜色数组传递给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()
以下是我的解决方案:

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)
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)
只有数据为负数时才需要第一行


代码从此处改编。

继Ferguzz提供的答案之后,这里是一个更完整/最新的解决方案:

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)
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)
请注意以下几点:

  • 所有变量(如xpos、ypos)的定义应与中的代码类似

  • normalize()现在是normalize()

  • 压裂属于类型系列(来自熊猫),必须转换为列表


我追求的是复制cmap=cm.jet的行为,但bar3d似乎没有这样的选项。编辑我的问题以澄清这一点。此答案对于此处提出的问题没有任何用处(它根本不处理条形图),可能最好将其删除。
颜色
在作业前参考!必须导入颜色,
import matplotlib.colors as colors
在哪里定义dz?dz读起来像一个微分,它是z方向上的间隔距离吗?缺少导入matplotlib.cm作为CMM对于那些不知道如何处理此代码的人。其思想是将此代码插入到中所示的示例中