【问题标题】:Colorbar for matplotlib plot_surface commandmatplotlib plot_surface 命令的颜色条
【发布时间】:2011-07-06 17:33:06
【问题描述】:

在 Paul 的帮助下,我为我的应用程序修改了 mplot3d example code。代码如下:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)

x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
z1 = z * np.cos(0.5*x)

N = z1 / z1.max()  # normalize 0..1
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=cm.jet(N), linewidth=0, antialiased=False, shade=False)

fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

代码非常适合绘制曲面。但是当我尝试在上面的图中添加颜色条时,出现以下错误:

Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "C:\Python26\lib\site-packages\spyderlib\widgets\externalshell\startup.py", line 122, in runfile
    execfile(filename, glbs)
 File "C:\Documents and Settings\mramacha\My Documents\Python\Candela\test.py", line 22, in <module>
    fig.colorbar(surf, shrink=0.5, aspect=5)
  File "C:\Python26\lib\site-packages\matplotlib\figure.py", line 1104, in colorbar
    cb = cbar.Colorbar(cax, mappable, **kw)
  File "C:\Python26\lib\site-packages\matplotlib\colorbar.py", line 706, in __init__
    mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
  File "C:\Python26\lib\site-packages\matplotlib\cm.py", line 261, in autoscale_None
    raise TypeError('You must first set_array for mappable')
TypeError: You must first set_array for mappable

如果有人能够指导我,我将不胜感激。

帕布

【问题讨论】:

  • 您更有可能在 matplotlib 邮件列表中找到了解这些具体细节的人。

标签: python matplotlib


【解决方案1】:

您可以使用代理可映射对象,因为您的表面阵列未映射。可映射对象只是将任何数组的值转换为由颜色图定义的 RGB 颜色。

在您的情况下,您想对 z1 数组执行此操作:

import matplotlib.cm as cm
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(z1)
plt.colorbar(m)

【讨论】:

  • 这个答案利用了数据在 0-1 范围内缩放的事实。如果不是,则标量可映射对象将使用m = cm.ScalarMappable(cmap=surf.cmap, norm=surf.norm) 定义。
  • @pelson 惊人的评论。我很难找到更多关于 3d 绘图和彩色地图的信息。一直到现在都没有成功。除了挖掘 matplotly 示例之外,您会推荐一个源来了解更多信息吗?
猜你喜欢
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多