1

我正在开发一些代码来在图形上生成任意数量的二维图(地图和简单等高线图)。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。

4

1 回答 1

1

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

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

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

if axCurrent > 0:

for i...解决问题之前。

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

于 2013-01-04T08:22:03.797 回答