这个问题与这个问题密切相关:
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)
给我这个:
最后一个小时不见了。然后我从上面的帖子中找到了解决方案,那就是在时间数组中添加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))
太好了,这似乎奏效了。但现在我想添加轮廓。如果我使用times=np.arange(24)进行此操作,那么我可以像这样添加轮廓
cont_levs=[-0.5,0.5]
cs=ax.contour(xnum,times,x,cont_levs, colors='k')
我明白了:
但我的第一排又不见了
但是,如果我用这个
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')
这给了我这个情节:
所以现在我有了正确的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)
目前没有回答
相关问题 更多 >
编程相关推荐