Matplotlib maskoceans使用列表的结果

2024-09-29 17:18:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个列表x,y,z包含long,lat,value。我试着用contourf和maskoceans绘制一个图。我得到的结果在海岸线附近不是很好。试图增加linspace的参数会导致内存错误。有没有办法在靠近海岸线的地方取得更好的效果? 我的代码如下:

import numpy as np
import scipy.interpolate
from mpl_toolkits.basemap import Basemap,maskoceans
import matplotlib.pyplot as plt

x=[23.027008, 22.774524, 23.010211, 22.346053, 21.264416, 21.261967, 21.31769, 21.478437, 21.406678, 21.453064]
y=[36.547227, 36.824754, 37.482874, 37.61182, 37.873769, 37.935473, 37.978032, 38.139038, 38.162707, 38.168772]
z=[155.15, 354.86, 400.2, 47.16, 188.44, 277.01, 375.12, 87.71, 133.85, 123.56]

map =Basemap(projection='mill',
             llcrnrlat=36.928942,llcrnrlon=21.696255,
             urcrnrlat=38.03002,urcrnrlon=23.497298,
             resolution='i')
map.drawcoastlines()

xi, yi = np.linspace(21,24, 100), np.linspace(36, 39, 100)
xi, yi = np.meshgrid(xi, yi)

xm,ym=map(xi,yi)

rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)

zm=maskoceans(xi,yi,zi,resolution='h',grid=1.25)
map.contourf(xm, ym, zm,cmap='jet')
map.colorbar()


plt.show()

Tags: importmapasnppltscipybasemap海岸线
1条回答
网友
1楼 · 发布于 2024-09-29 17:18:55

你的问题是你的插值网格不够好,因为你是相当放大海岸线的复杂性。另外,你正在使用一个不同的分辨率为您的海洋为您的底图,这会导致一些奇怪的文物。所以我对你的代码做了3个修改:

  • 不要使用map作为变量名-它是一个内置的Python函数,不应该被重写。你知道吗

    m = Basemap(...

  • 提高插值栅格的分辨率

    xi, yi = np.linspace(21,24, 1000), np.linspace(36, 39, 1000)

  • 将马斯克海人的分辨率与底图匹配

    zm=maskoceans(xi,yi,zi,resolution='i',grid=1.25)

相关问题 更多 >

    热门问题