我在调整简单数据集以从点生成温度插值图时遇到问题
#!apt-get update
#!apt-get -qq install python-cartopy python3-cartopy
#!pip install metpy
像使用 colab 笔记本一样安装依赖项
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import requests
from pandas.io.json import json_normalize
import pandas as pd
!curl "https://climaya.com/fp-weather/api/api.php?q=GT_forecast&d=3" > data.json
df = pd.read_json("data.json")
#df
lat=df['latitude'].values
lon=df['longitude'].values
#lat,lon
这给出了一个 lat, lon 的数组
mapcrs=ccrs.PlateCarree(central_longitude=-90)
datacrs = ccrs.PlateCarree()
fig=plt.figure(figsize=(10,8))
ax=fig.add_subplot(1,1,1,projection=mapcrs)
ax.scatter(lon,lat,c=df['temp_high'].values*1,transform=datacrs)
这显示数据点正常
from metpy.interpolate import interpolate_to_grid, remove_nan_observations
lon=df['longitude'].values*1.
lat=df['latitude'].values*1.
dat=df['temp_high'].values*1.0
#lon,lat,dat data seems ok shape is 56, each just to asure numeric values
xp, yp, _ = mapcrs.transform_points(datacrs, lon, lat).T
x_masked, y_masked, dat = remove_nan_observations(xp, yp, dat)
gridx, gridy, gridz = interpolate_to_grid(x_masked, y_masked, dat, interp_type='cressman', minimum_neighbors=1, search_radius=40000, hres=5000)
#command in notebook ok no errors
import numpy as np
fig=plt.figure(figsize=(10,8))
ax=fig.add_subplot(1,1,1,projection=mapcrs)
ax.contourf(gridx,gridy,gridz,np.arange(0,35.1,1))
这会产生错误 TypeError: Input z must be at least a (2, 2) 形状的数组,但具有形状 (1, 1)
作为 python 的新手,metpy 一直在努力解决这个问题,感谢您的帮助。
**已编辑:谢谢@dopplerShift,就是这样,这是修复和结果
gridx, gridy, gridz = interpolate_to_grid(lon, lat, dat, interp_type='cressman', minimum_neighbors=1, search_radius=.75, hres=.1)