在墨卡托投影仪的地图上绘制数据看起来翻转了 90 度纬度
Plotting data on map in Mercator projector looks flipped 90 deg latitude
我正在使用 Arch Linux,通过 packagemanager 在系统上安装了 cartopy 版本 0.17.0。我正在尝试使用 cartopy 作为绘图工具从 hdf5 文件中绘制一个简单的卫星图像。以下是我尝试生成图像的示例代码:-
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import h5py
import numpy as np
import cartopy
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
input_file = "../input/satellite/3RIMG_27MAR2020_0545_L1C_ASIA_MER.h5"
fh=h5py.File(input_file, 'r')
X = fh["X"][()]
Y = fh["Y"][()]
IMG_TIR1 = fh["IMG_TIR1"][()][0, :, :]
lower_latitude, left_longitude = fh['Projection_Information'].attrs["lower_left_lat_lon(degrees)"]
upper_latitude, right_longitude = fh['Projection_Information'].attrs["upper_right_lat_lon(degrees)"]
lons_values = np.linspace(left_longitude, right_longitude, X.shape[0])
lats_values = np.linspace(lower_latitude, upper_latitude, Y.shape[0])
print(lons_values)
print(lats_values)
lons, lats = np.meshgrid(lons_values, lats_values)
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))
ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.Mercator())
ax.coastlines('50m', linewidth=0.8, color='black')
gl = ax.gridlines(draw_labels=True)
gl.xformatter = LONGITUDE_FORMATTER
plt.title('IMG_TIR1')
# plt.savefig('INSAT3D_IMG_TIR1_cartopy.png', bbox_inches='tight', dpi=100)
plt.show()
最终的情节就像这样:-
上图有两个问题。首先,将绘制的数据翻转 90 度倒置,即印度和数据看起来倒置。其次,绘制 0.00* 范围的纬度和经度刻度,其中 lons ([ 44.5 ... 110.]
) 和 lats ([-10. ... 45.5]
) 数组中可用的实际数据不同。
有人可以帮助我解释为什么数据会翻转吗?感谢您帮助我完善数据。
更新 1
解决了使用 follwing 命令绘图时反转经纬度的翻转数据问题:-
IMG_TIR1 = fh["IMG_TIR1"][()][0, ::-1, :]
之后图像看起来像这样:-
但是关于纬度和经度刻度的第二个问题没有绘制实际值保持不变。
如果您的数据坐标是 lats/lons,那么您必须使用 PlateCarree
转换而不是 Mercator
。
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))
# Change the transform keyword here
ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.PlateCarree())
请参阅 cartop 文档中的此页面以更好地理解这一点:https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html
我正在使用 Arch Linux,通过 packagemanager 在系统上安装了 cartopy 版本 0.17.0。我正在尝试使用 cartopy 作为绘图工具从 hdf5 文件中绘制一个简单的卫星图像。以下是我尝试生成图像的示例代码:-
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import h5py
import numpy as np
import cartopy
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
input_file = "../input/satellite/3RIMG_27MAR2020_0545_L1C_ASIA_MER.h5"
fh=h5py.File(input_file, 'r')
X = fh["X"][()]
Y = fh["Y"][()]
IMG_TIR1 = fh["IMG_TIR1"][()][0, :, :]
lower_latitude, left_longitude = fh['Projection_Information'].attrs["lower_left_lat_lon(degrees)"]
upper_latitude, right_longitude = fh['Projection_Information'].attrs["upper_right_lat_lon(degrees)"]
lons_values = np.linspace(left_longitude, right_longitude, X.shape[0])
lats_values = np.linspace(lower_latitude, upper_latitude, Y.shape[0])
print(lons_values)
print(lats_values)
lons, lats = np.meshgrid(lons_values, lats_values)
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))
ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.Mercator())
ax.coastlines('50m', linewidth=0.8, color='black')
gl = ax.gridlines(draw_labels=True)
gl.xformatter = LONGITUDE_FORMATTER
plt.title('IMG_TIR1')
# plt.savefig('INSAT3D_IMG_TIR1_cartopy.png', bbox_inches='tight', dpi=100)
plt.show()
最终的情节就像这样:-
上图有两个问题。首先,将绘制的数据翻转 90 度倒置,即印度和数据看起来倒置。其次,绘制 0.00* 范围的纬度和经度刻度,其中 lons ([ 44.5 ... 110.]
) 和 lats ([-10. ... 45.5]
) 数组中可用的实际数据不同。
有人可以帮助我解释为什么数据会翻转吗?感谢您帮助我完善数据。
更新 1 解决了使用 follwing 命令绘图时反转经纬度的翻转数据问题:-
IMG_TIR1 = fh["IMG_TIR1"][()][0, ::-1, :]
之后图像看起来像这样:-
但是关于纬度和经度刻度的第二个问题没有绘制实际值保持不变。
如果您的数据坐标是 lats/lons,那么您必须使用 PlateCarree
转换而不是 Mercator
。
fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection=cartopy.crs.Mercator()))
# Change the transform keyword here
ax.pcolormesh(lons, lats, IMG_TIR1, cmap=plt.cm.gist_gray, transform=cartopy.crs.PlateCarree())
请参阅 cartop 文档中的此页面以更好地理解这一点:https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html