Matplotlib 3d plot - 将颜色条与不同的轴相关联

Matplotlib 3d plot - associate colorbar with different axis

我目前正在使用 Matplotlib 1.4.3 在 Python 2.7.9 中绘制一些 3D 图。 (抱歉,我的评分还不允许我附上图片)。我想切换 x 轴和 z 轴的数据(如代码示例中所示),但也让颜色条与 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 轴数据时,可以理解的是,颜色条也会自动更改以适应新的 z 轴值(最初是 x 轴值),因为它与 z 相关联- 仅限变量。有没有一种方法可以在 python 中进行操作,使颜色条与其他轴(x 轴或 y 轴)之一相关联?

我试过查看颜色条文档。我目前怀疑 config_axis() 函数可能会完成这项工作,但没有文字解释它是如何使用的 (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()