我想在Lon / Lat中使用pcolormesh 卫星颗粒的网格。卫星倾向于 65度。所以pcolormesh有点偏斜。 我准备了下面的两个片段。
Snippet(1)部分来自那些问题 Python quiver and pcolormesh not lining up exactly right 在pcolormesh中,每个像素对应左下角的数据, (见情节(1))。 数据点始终是带有x标记的散点图。
我之后做的是移动像素,以便像素居中 实际数据点。 首先,我用具有分辨率的像素移动像素(参见图(2))。
然后我用Y(纬度)和的个体差异移动了像素 X(经度)(见图(3)) 我做了最后一步(用Lat / Lon转换),因为在我的实际例子中 (摘录2)分辨率还是让我们说出纬度与之间的差异 经度是不一样的和变化。所以我没有常规网格。 我在开头插入一列0,因为否则我无法使用 pcolormesh。 在我的情况下,这不是问题,因为我真的不需要第一列。
import numpy as np
import matplotlib.pyplot as plt
# Snippet (1)
# Note: In the snippets Latitude is convertible with Y
# Longitude is convertible with X
def middle_pc_X(X):
# X convertible with lon
X_half = np.abs(np.diff(X)/2.0)
X_half = np.insert(X_half, 0, 0, axis=1)
return X_half
def middle_pc_Y(Y):
# Y convertible with lat
Y_half = np.abs(np.diff(Y, axis=0)/2.0)
Y_half = Y_half.T
Y_half = np.insert(Y_half, 0, 0, axis=1)
return Y_half
x = np.arange(5)
y = np.arange(5)
X, Y = np.meshgrid(x, y)
C = np.random.rand(len(x), len(y))
res = 1.0 # 1.0 distance between x and y
# combination of X/Y
X_mega = middle_pc_X(X)
Y_mega = middle_pc_Y(Y)
#Plots
# Plot (1)
# Plot Pcolormesh default
plt.figure(figsize=(8, 8))
plt.subplot(2,2,1)
plt.pcolormesh(X, Y, C)
plt.colorbar()
plt.scatter(X,Y, s=20, c='black', marker='x')
# Plot (2)
# Plot with res
plt.subplot(2,2,2)
plt.pcolormesh(X-(res/2.0),
Y-(res/2.0),
C)
plt.colorbar()
plt.scatter(X,Y, s=20, c='black', marker='x')
# Plot(3)
# Plot in combination with X/Y
plt.subplot(2,2,3)
plt.pcolormesh(X-X_mega,
Y-Y_mega,
C)
plt.colorbar()
plt.scatter(X,Y, s=20, c='black', marker='x')
小组(2): 现在我来到我的第二个片段和我的问题 在这里,我分别准备了卫星颗粒的片段。 正如我所提到的,卫星的倾角为65度。 卫星位于其下降节点(从北向南飞行)。 因此,在其他情况下,卫星位于其上升节点(它正在飞行) 南到北)。 颗粒最初的形状为Lon(7933,24), Lat(7933,24),Rain(7933,24)
在片段(2)中我做了数据的快捷方式(4 x 4) 在片段(2)的Plot(4)中,您可以看到原始数据。
我想绘制与代码段一样的情节, 以便像素以实际数据点为中心 可悲的是,一半的分辨率不起作用, 分辨率不一样。 我认为我必须使用差异法?
import numpy as np
import matplotlib.pyplot as plt
# Snippet (2)
Lon_bin = np.array([[-42.84589005, -42.84976959, -42.85368347, -42.85772705],
[-42.73979187, -42.74386215, -42.74796677, -42.75219727],
[-42.63357925, -42.63784409, -42.64214325, -42.64657211],
[-42.52753067, -42.53199387, -42.53648758, -42.54111099]])
Lat_bin = np.array([[ 65.62378693, 65.57657623, 65.52971649, 65.48249817],
[65.62098694, 65.57377625, 65.52692413, 65.47970581],
[65.61811066, 65.57090759, 65.52405548, 65.47683716],
[65.61515045, 65.56794739, 65.52110291, 65.47389221]])
rain = np.arange(16).reshape(4,4)
# Plots
# Plot (4)
plt.figure()
plt.figure(figsize=(10, 10))
plt.pcolormesh(Lon_bin,
Lat_bin,
rain)
plt.scatter(Lon_bin,
Lat_bin,
s=30, c='black', marker='x')
感谢您的帮助 马库斯