csv中有经纬度和风速大小的数据是025°x025°的怎么用python内插为01°x01°并绘图的
内插可以使用插值函数进行,常用的插值函数有线性插值、三次样条插值等。这里我们用scipy库中的griddata函数进行线性插值。
首先,我们需要读取csv文件中的数据,并将经纬度和风速大小分别存储在numpy数组中:
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
lat = np.array(data['lat'])
lon = np.array(data['lon'])
wind_speed = np.array(data['wind_speed'])
然后,我们需要将经纬度网格化为0.1°x0.1°的网格。我们可以通过numpy的meshgrid函数实现:
lat_new = np.arange(lat.min(), lat.max()+0.1, 0.1)
lon_new = np.arange(lon.min(), lon.max()+0.1, 0.1)
lat_mesh, lon_mesh = np.meshgrid(lat_new, lon_new)
接下来,我们就可以使用scipy的griddata函数进行线性插值了。它的用法如下:
from scipy.interpolate import griddata
wind_speed_new = griddata((lat, lon), wind_speed, (lat_mesh, lon_mesh), method='linear')
最后,我们可以使用matplotlib库将插值后的风速数据绘制成图像:
import matplotlib.pyplot as plt
plt.imshow(wind_speed_new, origin='lower', extent=[lon_new.min(), lon_new.max(), lat_new.min(), lat_new.max()])
plt.colorbar()
plt.show()
完整代码如下:
import pandas as pd
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
data = pd.read_csv('data.csv')
lat = np.array(data['lat'])
lon = np.array(data['lon'])
wind_speed = np.array(data['wind_speed'])
lat_new = np.arange(lat.min(), lat.max()+0.1, 0.1)
lon_new = np.arange(lon.min(), lon.max()+0.1, 0.1)
lat_mesh, lon_mesh = np.meshgrid(lat_new, lon_new)
wind_speed_new = griddata((lat, lon), wind_speed, (lat_mesh, lon_mesh), method='linear')
plt.imshow(wind_speed_new, origin='lower', extent=[lon_new.min(), lon_new.max(), lat_new.min(), lat_new.max()])
plt.colorbar()
plt.show()
原文地址: https://www.cveoy.top/t/topic/bxw1 著作权归作者所有。请勿转载和采集!