在 Cartopy UTM 投影上设置轴范围
Setting axis extent on Cartopy UTM projection
我想用Matplotlib(v3.1.3
)和Cartopy(v0.17.0
)绘制一组UTM坐标,然后手动设置轴的范围。通常我可以使用 axis.set_extent((left, right, bottom, top))
执行此操作,但是当我尝试使用 UTM 坐标执行此操作时,我收到一条错误消息,声称我的坐标超出了允许的范围。当我从字面上复制并插入当前轴范围(使用 axis.get_extent()
)时也会发生这种情况。
请参阅以下最小示例:
import cartopy
import cartopy.crs as ccrs
import numpy as np
import matplotlib.pyplot as plt
# Some random UTM coordinates
UTM = np.array([
[328224.965, 4407328.289],
[328290.249, 4407612.599],
[328674.439, 4408309.066],
[327977.178, 4407603.320],
[328542.037, 4408510.581]
]).T
# Split into east and north components
east, north = UTM
# Create a canvas with UTM projection
fig = plt.figure()
ax = fig.add_subplot(111, projection=ccrs.UTM(zone="11S"))
# Plot coordinates
ax.scatter(east, north)
# Get the extent of the axis
extent = ax.get_extent()
# Attempt to set the axis extent
ax.set_extent(extent)
plt.show()
这会引发以下异常:
ValueError: Failed to determine the required bounds in projection coordinates. Check that the values provided are within the valid range (x_limits=[-250000.0, 1250000.0], y_limits=[-10000000.0, 25000000.0]).
这是一个错误还是我做错了什么?是否有另一种设置轴范围的方法?
代码行:
ax.set_extent(extent)
有一个选项 crs=None
,它转换为将 ccrs.PlateCarree()
作为默认值。这意味着经度和纬度的值在代码中的 extent
中是预期的。
为了正确,您必须指定正确的 crs:-
ax.set_extent(extent, crs=ccrs.UTM(zone="11S"))
我想用Matplotlib(v3.1.3
)和Cartopy(v0.17.0
)绘制一组UTM坐标,然后手动设置轴的范围。通常我可以使用 axis.set_extent((left, right, bottom, top))
执行此操作,但是当我尝试使用 UTM 坐标执行此操作时,我收到一条错误消息,声称我的坐标超出了允许的范围。当我从字面上复制并插入当前轴范围(使用 axis.get_extent()
)时也会发生这种情况。
请参阅以下最小示例:
import cartopy
import cartopy.crs as ccrs
import numpy as np
import matplotlib.pyplot as plt
# Some random UTM coordinates
UTM = np.array([
[328224.965, 4407328.289],
[328290.249, 4407612.599],
[328674.439, 4408309.066],
[327977.178, 4407603.320],
[328542.037, 4408510.581]
]).T
# Split into east and north components
east, north = UTM
# Create a canvas with UTM projection
fig = plt.figure()
ax = fig.add_subplot(111, projection=ccrs.UTM(zone="11S"))
# Plot coordinates
ax.scatter(east, north)
# Get the extent of the axis
extent = ax.get_extent()
# Attempt to set the axis extent
ax.set_extent(extent)
plt.show()
这会引发以下异常:
ValueError: Failed to determine the required bounds in projection coordinates. Check that the values provided are within the valid range (x_limits=[-250000.0, 1250000.0], y_limits=[-10000000.0, 25000000.0]).
这是一个错误还是我做错了什么?是否有另一种设置轴范围的方法?
代码行:
ax.set_extent(extent)
有一个选项 crs=None
,它转换为将 ccrs.PlateCarree()
作为默认值。这意味着经度和纬度的值在代码中的 extent
中是预期的。
为了正确,您必须指定正确的 crs:-
ax.set_extent(extent, crs=ccrs.UTM(zone="11S"))