我正在开发一些代码来在图形上生成任意数量的二维图(地图和简单等高线图)。matplotlib 子图例程对此非常有效。在下面的简化示例中,一切正常。然而,在我的实际应用程序中——它对子图、contourf 和颜色条使用完全相同的命令,只是这些命令分散在几个例程中——颜色条上的标签没有显示出来(虽然颜色补丁似乎没问题)。即使经过数小时的阅读文档和网络搜索,我什至不知道从哪里开始寻找问题所在。如果我有我的颜色条实例(cbar),我应该能够找出刻度标签位置是否有意义,刻度标签是否设置为可见,我的字体设置是否有意义,等等...... 但是我如何实际检查这些属性?有没有人遇到过类似的问题?(甚至更好:找到了解决方案?)哦,是的:如果我在实际的绘图例程(发出 contourf 命令的地方)中手动创建一个新的图形和轴,那么它将再次工作。但这意味着失去对图形布局等的所有控制。可能是我没有正确传递我的轴实例吗?这是我所做的:
fig, ax = plt.subplots(nrows, ncols)
row, col = getCurrent(...)
plotMap(x, y, data, ax=ax[row,col], ...)
然后,在 plotMap 内部:
c = ax.contourf(x, y, data, ...)
ax.figure.colorbar(c, ax=ax, orientation="horizontal", shrink=0.8)
如上所述,以下带有简化图和人工数据的示例可以正常工作:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0.,360.,5.)*np.pi/180.
y = np.arange(0.,360.,5.)*np.pi/180.
data = np.zeros((y.size, x.size))
for i in range(x.size):
data[:,i] = np.sin(x[i]**2*y**2)
fig, ax = plt.subplots(2,1)
contour = ax[0].contourf(x, y, data)
cbar = ax[0].figure.colorbar(contour, ax=ax[0], orientation='horizontal', shrink=0.8)
contour = ax[1].contourf(x, y, data, levels=[0.01,0.05,0.1,0.05])
cbar = ax[1].figure.colorbar(contour, ax=ax[1], orientation='horizontal', shrink=0.8)
plt.show()
谢谢你的帮助!
在进一步探索之后添加:
for t in cbar.ax.get_xticklabels():
print t.get_position(), t.get_text(), t.get_visible()
向我显示正确的文本和可见 = True,但所有位置都是 (0.,0.)。这会是个问题吗?
顺便说一句:轴标签有时也会丢失......我在 Windows 上使用 matplotlib 版本 1.1.1 和 python 2.7.3。