我目前正在使用matplotlib 1.4.3在python 2.7.9中执行一些3d绘图。(抱歉,我的分级还不允许我附加图片)。我想切换X轴和Z轴的数据(如在代码示例中),但同时也使COROBAR与X轴而不是Z轴本身联系起来。

import pylab as py
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import matplotlib as mpl
from matplotlib import cm

# Create figure and get data
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)

# Plot surface and colorbar
c1 = ax.plot_surface(Z, Y, X, rstride=8, cstride=8, alpha=0.9, cmap='PiYG_r')
cbar = plt.colorbar(c1)

# Labels
ax.set_xlabel('X')
ax.set_xlim3d(-100, 100)
ax.set_ylabel('Y')
ax.set_ylim3d(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim3d(-40, 40)

plt.show()

当我在这个阶段切换X轴和Z轴数据时,COLLBAR也可以自动地改变以适应新的Z轴值(原来是X轴值),因为它只与Z变量相关。在python中,有没有一种方法可以使colorbar与其他轴(x轴或y轴)相关联?
我试过看色条文档目前我怀疑CONTIAXAXIS()函数可以做这项工作,但是没有文本解释它是如何使用的(http://matplotlib.org/api/colorbar_api.html)。
提前谢谢。
当做
弗朗索瓦

最佳答案

您必须使用facecolors而不是cmap,调用colorbar时,我们必须使用ScalarMappable创建可映射对象这里的代码对我有用。

import pylab as py
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import matplotlib as mpl
from matplotlib import cm

# Create figure and get data
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)

N = (Z-Z.min())/(Z-Z.min()).max()

# Plot surface and colorbar
c1 = ax.plot_surface(Z, Y, X, rstride=8, cstride=8, alpha=0.9, facecolors=cm.PiYG_r(N))

m = cm.ScalarMappable(cmap=cm.PiYG_r)
m.set_array(X)
cbar = plt.colorbar(m)


# Labels
ax.set_xlabel('X')
ax.set_xlim3d(-100, 100)
ax.set_ylabel('Y')
ax.set_ylim3d(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim3d(-40, 40)

plt.show()

10-07 21:38