首页 > 解决方案 > 在地图上画一个矩形框

问题描述

我试图在我的美国地图上绘制三个矩形框,只是为了简单地显示感兴趣的区域。我创建了一张美国的空地图,然后实现了 matplotlibs 补丁集合来创建所需的三个框。当我使用 Basemap 中的示例代码/地图时,我能够显示这些框(我首先在其中弄清楚了如何绘制框)。虽然,我不喜欢它使用示例代码生成的地图,但我想尝试将这些框添加到我自己的地图上。当我这样做时,我得到的只是一张美国地图,上面有州界线,没有矩形框,此时,我不确定是什么导致了我的问题。第一个代码和情节显示了示例代码给我的内容,第二个代码和情节来自我想要使用/创建的地图。感谢您的任何帮助!

from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
m = Basemap(projection='cyl',llcrnrlat=14,urcrnrlat=55, 
            llcrnrlon=-130,urcrnrlon=-60,resolution='c')
m.drawcoastlines()

patches_m = []
patches_s = []
patches_t = []
midwest = np.array([[-103,44],[-89.7,44],[-89.7,37],[-103,37]])
seus = np.array([[-76,30],[-94,30],[-94,37],[-76,37]])
txok = np.array([[-103,30],[-94,30],[-94,37],[-103,37]])

patches_m.append(Polygon(midwest))
patches_s.append(Polygon(seus))
patches_t.append(Polygon(txok))


ax.add_collection(PatchCollection(patches_m, facecolor='lightgreen', edgecolor='k', linewidths=0.5))
ax.add_collection(PatchCollection(patches_s, facecolor='lightpink', edgecolor='k', linewidths=0.5))
ax.add_collection(PatchCollection(patches_t, facecolor='lightblue', edgecolor='k', linewidths=0.5))

在此处输入图像描述

levels = np.arange(-.04,.04,.001).tolist()
cmap=cmocean.cm.balance
fig, axs = plot.subplots(ncols=1, nrows=1, axwidth = 10,     projection=crs.Mercator(), tight = False)
ax1 = axs
axs.format(suptitle=(''), titlesize = 20, coast = True, innerborders = True)

patches_m = []
patches_s = []
patches_t = []
midwest = np.array([[-103,44],[-89.7,44],[-89.7,37],[-103,37]])
seus = np.array([[-76,30],[-94,30],[-94,37],[-76,37]])
txok = np.array([[-103,30],[-94,30],[-94,37],[-103,37]])

patches_m.append(Polygon(midwest))
patches_s.append(Polygon(seus))
patches_t.append(Polygon(txok))

ax1.add_collection(PatchCollection(patches_m, facecolor='lightgreen', edgecolor='k', linewidths=0.5))
ax1.add_collection(PatchCollection(patches_s, facecolor='lightpink', edgecolor='k', linewidths=0.5))
ax1.add_collection(PatchCollection(patches_t, facecolor='lightblue', edgecolor='k', linewidths=0.5))

axs.set_extent(
[
    310, # minimum longitude
    220, # min longitude
    10, # max latitude
    56 # max latitude
],
crs=crs.PlateCarree()

) 在此处输入图像描述

标签: pythonmatplotlibmatplotlib-basemap

解决方案


推荐阅读