使用matplotlib
模块ax.scatter()
时,如果添加了edgecolor参数,会导致所有的点都被添加边缘,但我们是想只为有数值(非NaN值)的点的边缘,此时可以使用np.isnan()
函数来创建一个布尔掩码,然后根据该掩码来绘制非NaN值的点:
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# 假设mapmean_sites是您的二维数据数组
# 创建一个布尔掩码,其中True表示非NaN值,False表示NaN值
mask = ~np.isnan(mapmean_sites)
# 提取非NaN值的X和Y坐标
X = X[mask]
Y = Y[mask]
# 提取非NaN值的数据
data = mapmean_sites[mask]
# 创建一个颜色映射对象,用于根据data的值着色
cmaps = plt.get_cmap('WhiteBlueGreenYellowRed')
# 创建一个绘图对象
fig, ax = plt.subplots(subplot_kw={'projection': ccrs.PlateCarree()})
# 使用scatter函数绘制非NaN值的点
scatter = ax.scatter(X, Y, c=data, vmin=0, vmax=120, cmap=cmaps, edgecolor='black')
# 添加颜色条
cbar = plt.colorbar(scatter)
cbar.set_label('Your Colorbar Label')
# 显示绘图
plt.show()
以上示例中,首先创建一个布尔掩码 ( mask
),其中True表示非NaN值,False表示NaN值。然后,从X
和Y
数组中提取与True值相对应的坐标,从mapmean_sites
数组中提取与True值相对应的数据,然后使用scatter
函数绘制这些非NaN值的点。最后,添加颜色条和其他绘图元素,以完成绘图。