繁体   English   中英

Python:Cartopy 和 pcolormesh,做一个循环

[英]Python : Cartopy and pcolormesh, do a loop

我实际上是在实习,我想绘制地图上每个月的海洋表面温度数据多年(我想要 50 年,但我稍后会看到),我希望它专注于一个精确的区域. 我已经成功地做到了这一点,除了当我在每张地图(每个月 12 张地图)中绘制我的数据时。 我每个月都有相同的数据,似乎一月份的温度在每张地图上。 这条线可能有问题:

ax.pcolormesh(lon, lat, tos, data=dset, cmap=cmap)

但我不知道如何解决它。 也许我必须在此代码行中执行另一个循环,但这可能吗? 感谢您的回答!

代码 :

from netCDF4 import Dataset
import matplotlib.pylab as plt
import cartopy.crs as ccrs
import numpy as np
import netCDF4 as nc

month_name=["Jan","Feb","Mar","Apr","May","June","Jul","Aug","Sep","Oct","Nov","Dec"]

data = "/Users/name/Desktop/Internship/tos_1979.nc" 
dset = Dataset(data)
fig = plt.figure(figsize=(24,24))
cmap = plt.cm.jet
for imonth in np.arange(1,13):  
ax = fig.add_subplot(4,3,imonth, projection=ccrs.PlateCarree())   
  tos = dset.variables['tos'][0, :, :]
  lon = dset.variables['longitude'][:]
  lat = dset.variables['latitude'][:]
  time = dset.variables['time'][:]

  ax.set_extent([-70,20,30,90])
  ax.coastlines();
  plt.title('Ocean Surface Temperature :'+ month_name[imonth-1],fontsize=12
  ax.stock_img()
  ax.gridlines()
  ax.pcolormesh(lon, lat, tos, data=dset, cmap=cmap)
plt.savefig('fig_tos_1979.png')
plt.show()

只是要知道,我在 MacBook(使用 Spyder)上使用 Python 编写代码。

我也对比例尺工具有问题,它安装在我的 Mac 上(感谢终端)但是当我导入这个工具时它说:

  ImportError: cannot import name 'scale_bar' from 'scalebar' (/Users/name/opt/anaconda3/lib/python3.9/site-packages/scalebar/__init__.py)

谢谢 !

这可能是因为您使用0对数据的索引进行了硬编码。

所以也许改变这个:
tos = dset.variables['tos'][0, :, :]

至:
tos = dset.variables['tos'][imonth-1, :, :]

但我猜是因为我不知道你的数据布局。

您还可以尝试使用 Xarray 加载数据,然后利用一些方便的函数来绘制这样的图。 看:
https://docs.xarray.dev/en/stable/user-guide/plotting.html#faceting

这仍然在后台使用 Matplotlib+Cartopy,但在您开始时可能会提供更简单的界面。

(我根本不熟悉比例尺模块......)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM