[英]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.