子图中的matplotlib颜色条:标签正在消失

时间:2012-12-13 15:20:46

标签: python matplotlib

我正在开发一些代码,用于在图形上生成任意数量的2D图(地图和简单的等高线图)。 matplotlib子图解例程非常适用于此。在下面的简化示例中,一切都按预期工作。但是,在我的实际应用程序中 - 它使用与子图,contourf和colorbar完全相同的命令,只是这些命令分散在几个例程中 - 颜色条上的标签没有显示(虽然颜色块似乎没问题)。即使经过几个小时的阅读文档和搜索网络,我甚至都不知道我可以从哪里开始寻找问题所在。如果我有我的colorbar实例(cbar),我应该能够找出ticklabel位置是否有意义,如果ticklabels设置为可见,我的字体设置是否有意义等等....但我该如何检查这些属性?有没有人遇到过类似的问题? (甚至更好:找到了解决方案?)哦是的:如果我在实际的绘图程序中手动创建一个新的图形和轴(发出了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()

显示正确的文本和visible = True,但所有位置都是(0,0。)。这可能是个问题吗?

BTW:轴标签有时也会丢失......我在windows上使用matplotlib 1.1.1版和python 2.7.3。

1 个答案:

答案 0 :(得分:1)

好的 - 我可以追踪它:matplotlib正常工作! 错误被嵌入到一个实用程序例程中,一旦生成给定数量的绘图面板,就会为每个页面添加一些最后润色(=数字)。在这个例程中,我想隐藏空的情节面板(即在最后一页),我用

做了这个
ax = fig.axes
for i in range(axCurrent, len(ax)):
    ax[i].set_axis_off()

但是,当程序为任何页面输入此例程但最后一个时,axCurrent已经重置为零,因此图中的所有轴都关闭了轴。添加

if axCurrent > 0:
之前的 ... 解决了这个问题。

对不起,如果我偷了任何人的时间。无论如何,感谢所有正在考虑帮助的人!