簡體   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