数据未绘制,但没有错误

时间:2018-12-12 03:02:31

标签: python matplotlib plot projection cartopy

我正在尝试绘制一些降水数据。我正在使用的代码与该代码here略有不同。

当我使用链接中使用的站点中的数据进行绘图时,代码工作正常,但是当我使用自己拥有的其他数据集时,则不会绘图。该数据集与链接示例中使用的数据集之间的最大区别在于,我的数据集是全局数据。我使用的数据集也是netcdf,没有被屏蔽,我以与示例相同的方式加载它。

我熟悉数据,并且事实上我应该看到一些东西,示例中使用的轮廓值对于我正在使用的另一组数据是合理的。

我的代码是相同的,期望在绘制已修改的图形(下图)的部分中有所更改,以便它将绘制特定区域而不是示例中的CONUS(使用ax.set_extent)。

当我不设置范围时,似乎会绘制数据,但是没有一个边界(海岸线,状态线等)不会绘制。基于此,我猜测这可能与数据集本身有关,或者与set_extent有关,或者是导致数据出错的多种因素的组合。无论哪种方式,我在绘制图形时都不会出现任何错误。但是,可能还有其他我所缺少的东西。

最后,我实际上是将我的数据集与示例链接中使用的数据集进行比较,因此我希望它们在同一投影中。

感谢您的见解,如果您需要有关数据本身的更多信息,请告诉我!

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, projection=proj)

ax.set_extent((x1,x0,y0,y1))

# draw coastlines, state and country boundaries, edge of map.
ax.coastlines()
ax.add_feature(cfeature.BORDERS)
ax.add_feature(cfeature.STATES)

cs1 = ax.contourf(ym, xm, data1, clevs, cmap=cmap, norm=norm)

# add colorbar.
cbar = plt.colorbar(cs1, orientation='horizontal')
#cbar.set_label(data1.units)

#ax.set_title(prcpvar.long_name + ' for period ending ' + nc.creation_time)
plt.show()
plt.savefig('ncep_model')

上面的代码中不包含扩展区时的结果: enter image description here

编辑1:

我要补充一点,我能够使用下面的代码(从我制作的默认模板)成功绘制数据。我尝试将投影更改为立体图像,但是由于使用底图,因此一直无法使用底图正确绘制。作为替代方案,如果您无法找出以上代码的错误,而可以帮助更改以下代码的投影,我也将考虑。此时,我只希望我的数据以我想要的正确投影正确绘制!

(我还提供了以下代码的结果,以确认数据应显示在此位置)

LLlat = 40.
LLlon = 263.
URlat = 44.
URlon = 270.

lat = xm
lon = ym

%matplotlib inline
plt.figure(1,figsize=(10, 8),)
plt.title('Convective Precipitation 8/28/2018 0Z (in) Valid July 2018')

map = Basemap(projection='cyl',\
        llcrnrlat=LLlat,urcrnrlat=URlat,\
        llcrnrlon=LLlon,urcrnrlon=URlon,\
        rsphere=6371200.,resolution='i')
map.drawcoastlines(linewidth=0.5) # Draw some coastlines
map.drawstates(linewidth=0.5) # Draw some coastlines
map.drawrivers(color='#000000')
map.drawparallels(np.arange(-90.,91.,30),labels=[1,0,0,0]) # Drawing lines of latitude
map.drawmeridians(np.arange(0.,330.,60),labels=[0,0,0,1]) # Drawing lines of longitude
lons,lats = map(lon,lat) # Setting up the grid in cylindrical coords.
cs = plt.contourf(lons,lats,data1[:,:], clevs,cmap=cmap, norm=norm)
cb = plt.colorbar(cs,orientation='horizontal')

plt.show()

enter image description here

编辑2:

当我在第一段代码中不包含set_extent时,我已经添加了结果图(不知道这是否会有所帮助,但以为我也会包括在内)

1 个答案:

答案 0 :(得分:1)

因此,在数据上拥有更多信息(例如指向示例文件的链接)确实很有用,但是我猜测您的数据与原始数据不同,它在立体投影中没有给出坐标。使用Cartopy进行绘制时,如果没有另外指定,则所有绘制命令均假定给定的x,y值位于为轴指定的投影中(对于原始代码,该值为ccrs.Stereographic)。如果不是这种情况(例如在绘制纬度/经度时),则需要通过将transform传递给绘图命令来进行指定,如下所示,在此我将x,y值指定为纬度/经度:

data_proj = ccrs.PlateCarree()
cs1 = ax.contourf(ym, xm, data1, clevs, cmap=cmap, norm=norm,
                  transform=data_proj)