【问题标题】:Data not plotting, but no errors数据未绘制,但没有错误
【发布时间】:2018-12-12 03:02:30
【问题描述】:

我正在尝试绘制一些降水数据。我使用的代码是从这段代码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')

上述代码中未包含范围时的结果:

编辑 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()

编辑 2:

当我在第一块代码中不包含 set_extent 时,我添加了结果图(不知道这是否有帮助,但我想我也会包含它)

【问题讨论】:

  • 这不是解决您问题的方法。使用 plt.show() 从内存中清除绘图。你的 savefig 不会保存任何东西。在 plt.savefig 之后使用 plt.show
  • 我知道这一点。解决问题后,我将摆脱 plt.show() 。我想我忘记评论了。哈哈
  • 那么底图到底出了什么问题?
  • 我希望它在不同的投影中。具体来说,像示例中的立体图。自从我发布以来,我一直在玩它,当我使用底图时,我也无法获取要绘制的数据。我实际上是在尝试将我的数据集与示例中使用的数据进行比较,所以我希望它们在同一个投影中。

标签: python matplotlib plot projection cartopy


【解决方案1】:

因此,获得有关数据的更多信息(例如指向示例文件的链接)会非常有用,但我的猜测是,与原始数据不同,您的数据不会在立体投影中给出坐标。使用 Cartopy 绘图时,如果您没有另外指定,所有绘图命令都假定给定的 x,y 值在为轴指定的投影中(对于原始代码,这是ccrs.Stereographic)。如果不是这种情况,例如在绘制 lon/lats 时,您需要通过将 transform 传递给绘图命令来指定这一点,如下所示,我指定 x,y 值为 lat/lons:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2023-02-05
    • 1970-01-01
    • 2015-10-08
    • 2015-04-08
    • 2019-03-16
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多