Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在墨卡托投影仪中在地图上绘制数据看起来翻转了90度纬度_Python_Matplotlib_Cartopy - Fatal编程技术网

Python 在墨卡托投影仪中在地图上绘制数据看起来翻转了90度纬度

Python 在墨卡托投影仪中在地图上绘制数据看起来翻转了90度纬度,python,matplotlib,cartopy,Python,Matplotlib,Cartopy,我使用的是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.mp

我使用的是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 使用以下命令在打印时反转lats,解决了翻转数据问题:-

IMG_TIR1 = fh["IMG_TIR1"][()][0, ::-1, :]
在此之后,图像如下所示:-


但是关于lats和lons刻度的第二个问题(未绘制实际值)保持不变。

如果数据坐标为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文档中的本页,以便更好地理解这一点: