【发布时间】:2022-03-17 01:20:45
【问题描述】:
我正在尝试将来自 DSCOVR 卫星的数据绘制到正交投影上,并将海岸线添加到图像中。我正在使用 Matplotlib 和 cartopy。我可以显示海岸线或数据,但不能同时显示。我怀疑问题的一部分是纬度和经度数据包括黑暗区域(地球周围的空间)并被赋予值 -999.0。
数据可在以下位置找到: https://asdc.larc.nasa.gov/data/DSCOVR/EPIC/L2_CLOUD_03/2021/12/ 该目录中的任何文件都可以使用。
这是我的代码:
import cartopy.crs as ccrs
import h5py
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np
filename = 'DSCOVR_EPIC_L2_CLOUD_03_20211203163932_03.nc4'
def make_cloud_image(cloud_name):
cloud = h5py.File(filename, 'r')
cloud_data = np.array(cloud['geophysical_data/Cloud_Mask'])
lat_data = np.array(cloud['geolocation_data/latitude'])
lon_data = np.array(cloud['geolocation_data/latitude'])
lat = cloud.attrs.__getitem__('centroid_mean_latitude')[0]
lon = cloud.attrs.__getitem__('centroid_mean_longitude')[0]
projection = ccrs.Orthographic(central_longitude=lon, central_latitude=lat, globe=None)
ax = plt.subplot(projection=projection)
cmap = ListedColormap(["Black","dodgerblue", "lightblue", "lightyellow", "white"])
ax.pcolormesh(lat_data,lon_data, cloud_data, cmap=cmap, transform=projection)
ax.annotate(cloud_name[-30:-4],xy=(.5,.90),xycoords='axes fraction',
color='white',fontsize=6, horizontalalignment='center')
ax.set_global()
plt.axis('off')
ax.coastlines()
plt.show
make_cloud_image(filename)
【问题讨论】:
-
你试过转换that worked for this question吗?我也会尝试改变你想要的 z 顺序,或者任何一个 z 顺序,这取决于。我会在这个非常整洁的示例中自己尝试一下,但我在安装 cartopy 时遇到了麻烦。
-
@cphlewis 您需要在安装 Cartopy 之前安装 GEOS。 libgeos.org 从问题中添加转换有点帮助。我可以看到在海岸线上绘制的少量数据。
-
@Marshall Sutton,你还在做这个吗?如果是这样,请说明您如何获得“可以绘制海岸线或数据,但不能同时绘制两者”。我只能获取海岸线,但
ax.pcolormesh()不显示数据。你是如何绘制数据的?我可以用plt.imshow(cloud_data)绘制图像数据。如果使用_FillValue屏蔽云数据,显示效果会更好。 -
@kcw78 我使用了上面评论中的转换。我还必须将所有非地球像素归零。它们被设置为 -999 的值。将它们设置为零值似乎可以解决问题。这是我最新的解决方案。
标签: python matplotlib cartopy