使用matplotlib过绘等高线时,光栅打印中缺少数据行

2024-10-01 22:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题与这个问题密切相关:

Matplotlib: pcolor() does not plot last row and column?

我想要一个每小时数据的光栅图,标记在y轴上,从0到24。时间向量与数据数组大小相同,导致我丢失了一行数据:

import matplotlib.pyplot as plt
import numpy as np

x=np.random.uniform(size=(24,10))  # dummy data

times=np.arange(24)
xnum=np.arange(10)

fig,ax=plt.subplots()
img=ax.pcolormesh(xnum,times,x,cmap='seismic',
        rasterized=False)

给我这个:

first plot

最后一个小时不见了。然后我从上面的帖子中找到了解决方案,那就是在时间数组中添加1。我希望每2小时贴一次标签,所以我也改变了这一点:

times=np.arange(25) # NOTE ONE MORE THAN DATA SIZE
fig,ax=plt.subplots()
img=ax.pcolormesh(xnum,times,x,cmap='seismic',
        rasterized=False)
yticki=2
ax.set_yticks(np.arange(min(times), max(times)+yticki,yticki))

enter image description here

太好了,这似乎奏效了。但现在我想添加轮廓。如果我使用times=np.arange(24)进行此操作,那么我可以像这样添加轮廓

cont_levs=[-0.5,0.5]
cs=ax.contour(xnum,times,x,cont_levs, colors='k')

我明白了:

enter image description here

但我的第一排又不见了

但是,如果我用这个

times=np.arange(25)

我得到一个错误:

TypeError: Length of y must be number of rows in z.

通过将y向量限制为0-23,我可以获得正确的标签和顶部轮廓:

cs=ax.contour(xnum,times[:-1],x,cont_levs, colors='k')

这给了我这个情节:

enter image description here

所以现在我有了正确的Ytick,24个光栅框,以及顶部的轮廓,但是轮廓只有时间=23,这让我觉得它们要么被“挤压”了,因此是错误的,要么至少错过了最后一个小时

我可以向上移动轮廓,使其从t=0.5开始,在t=23.5结束,方法如下:

cs=ax.contour(xnum,times[:-1]+0.5,x,cont_levs, colors='k')

但是,有没有一种方法可以将所有24行数据保留在光栅图中,同时纠正y标签和过度绘制等高线,使其从图的底部t=0一直到顶部(t=24)


Tags: 数据光栅np时间plt标签ax轮廓

热门问题