这是我关于堆栈溢出的第一个问题,我希望有人能帮助我:)
我想在matplotlib中用PlateCaree和Mercator-projection投影地球表面,并在上面添加小圆圈以获得天梭指示线。
我在网上找了很多,但是我找不到正确的答案。到目前为止,我可以画出我的圆圈,但它们保持不变,不像它们应该做的那样伸展。以下是我到目前为止所做的:
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import math
def main():
# Setting values
proj = ccrs.PlateCarree()
lonW = -90
lonE = 90
latS = -90
latN = 90
cLat = (latN + latS) / 2
cLon = (lonW + lonE) / 2
res = '110m'
fig = plt.figure(figsize=(11, 8.5))
ax = plt.subplot(1, 1, 1, projection=proj)
ax.gridlines( draw_labels=True, linewidth=2, color='gray', alpha=0.5, linestyle='--')
ax.set_extent([lonW, lonE, latS, latN], crs=proj)
ax.coastlines(resolution=res, color='black')
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.BORDERS, linestyle='-', linewidth=0.5)
ax.add_feature(cfeature.LAKES)
# Adding a single coordinate
ax.scatter(24.3, 61.83, color='red', marker='o', s=6, transform=proj, label='Hyytiälä')
# Adding first circle
center_lon, center_lat = 0, 0
r = 10
ax.add_patch(mpatches.Circle(xy=[center_lon, center_lat], radius=r, color='red', alpha=0.3, transform=proj, zorder=30))
# Adding a second circle
center_lon, center_lat = 0, 30
r = 10
ax.add_patch(mpatches.Circle(xy=[center_lon, center_lat], radius=r, color='red', alpha=0.3, transform=proj, zorder=30))
# Adding a third circle
center_lon, center_lat = 0, 60
r = 10
ax.add_patch(mpatches.Circle(xy=[center_lon, center_lat], radius=r, color='red', alpha=0.3, transform=proj, zorder=30))
# Adding a last circle
center_lon, center_lat = 0, 90
r = 10
ax.add_patch(mpatches.Circle(xy=[center_lon, center_lat], radius=r, color='red', alpha=0.3, transform=proj, zorder=30))
字符串
非常感谢:)
1条答案
按热度按时间bvhaajcl1#
Cartopy已经将此内置为任何轴上的专用方法,因此更简单的方法是:
字符串
的数据
我不确定这是否是你想要的,你可以通过手工绘制圆圈来完成,如下所示。要做到这一点,你可以用下面的代码替换
ax.tissot()
,或多或少使用你已经定义的点:的数据
半径应该以米为单位,我粗略地定义为每度110000米,半径为10度。
的
edit:以下是Cartopy使用的自动和手动方法的示例:
型
的