maskoceans kullanırken maskelenen piksellerin endekslerini tanımlamaya çalışıyorum, böylece sadece sahip olduğum bir kodda yalnızca arazi piksellerini çağırabilirim Şu anda tüm dünyayı dolaşıyor, okyanus piksellerini umursamama rağmen. Bunu yapmak için farklı yöntemler deniyordum ve çizimlerimin gerçekten garip görünmeye başladığını fark ettim. Sonunda, onlara dokunmadığım halde, latin/lon indekslerimde bir şeyin karıştığını fark ettim! İşte kod:Basemap ve masoceans kullanarak Lat/lon "for" döngüsünden sonra karışık hale getiriliyor
import numpy as np
import netCDF4
from datetime import datetime, timedelta
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import matplotlib.dates as mpldates
import heat_transfer_coeffs
from dew_interface import get_dew
from matplotlib.dates import date2num, num2date
import numpy as np
import netCDF4
import heat_transfer_coeffs as htc
from jug.task import TaskGenerator
import matplotlib.cm as cm
import mpl_toolkits
from mpl_toolkits import basemap
from mpl_toolkits.basemap import Basemap, maskoceans
np.seterr(all='raise')
# set global vars
ifile = netCDF4.Dataset('/Users/myfile.nc', 'r')
times = ifile.variables['time'][:].astype(np.float64) # hours since beginning of dataset
lats_1d = ifile.variables['latitude'][:] # 90..-90
lons_1d = ifile.variables['longitude'][:] # 0..360
lons_1d[lons_1d>180]-=360 #putting longitude into -180..180
lons, lats = np.meshgrid(lons_1d, lats_1d)
ntimes, nlats, nlons = ifile.variables['tm'].shape
ifile.close()
map1 = basemap.Basemap(resolution='c', projection='mill',llcrnrlat=-36 , urcrnrlat=10, llcrnrlon=5 , urcrnrlon=52)
#Mask the oceans
new_lon = maskoceans(lons,lats,lons,resolution='c', grid = 10)
new_lat = maskoceans(lons,lats,lats,resolution='c', grid = 10)
fig = plt.figure
pc = map1.pcolormesh(lons, lats, new_lat, vmin=0, vmax=34, cmap=cm.RdYlBu, latlon=True)
plt.show()
for iii in range(new_lon.shape[1]):
index = np.where(new_lon.mask[:,iii] == False)
index2 = np.where(new_lon.mask[:,iii] == True)
new_lon[index[0],iii] = 34
new_lon[index2[0],iii] = 0
fig = plt.figure
pc = map1.pcolormesh(lons, lats, new_lat, vmin=0, vmax=34, cmap=cm.RdYlBu, latlon=True)
plt.show()
alıyorum ilk rakam 34 de Colorbar doyuma kadar enlem (karşılık gelen maskeli okyanuslar ve kara değerlerle Afrika'nın beklenen haritasını gösterir, ancak bu değer sadece olarak alınmıştır bir örnek)
Ancak, ilk olarak aynı şeyi çizmek gereken ikinci rakam, çıkar tüm birinci ve ikinci rakam arasındaki döngü yapmasa da, berbat Çiziminde yer alan parametrelerden herhangi birine dokunun:
Ben şekil 1 ve 2 arasındaki döngü dışarı yorum yaparsanız, şekil 2 sadece şekil 1'de burada ne olup bittiğini hakkında herhangi bir fikir gibi görünüyor?
Açıklama ve düzeltme için teşekkürler, mükemmel çalışıyor! Maskelezlerin bu özelliği hakkında hiçbir fikrim yoktu ...! –
Bir şey değil! Bu arada, özellik maskeleyilerden değil, temeldeki maskelenen diziden değil ve genel olarak atama işlemlerinde verilerin otomatik olarak kopyalanmadığı pythondan değildir. – innoSPG
Gotcha, açıklama için teşekkürler! –