python 如何在地图上绘制矩形框

简介: 通过官网的一些示例,对于处理海洋上的数据时,在地图上绘制矩形框,只需要增加一下投影,然后根据经纬度设置你的范围即可。

通过官网的一些示例,对于处理海洋上的数据时,在地图上绘制矩形框,只需要增加一下投影,然后根据经纬度设置你的范围即可。


matplotlib.patches.Rectangle官网说明

matplotlib.patches.Rectangle(xy, width, height, angle=0.0, **kwargs)[source]


从函数可以看出来,主要就是设置(起始点,宽,高),所谓的起始点就是从左下角开始绘图的点,投影到地图上就是我们的(经度第一个值,纬度第一个值),宽度和高度就简单了,选取的经度范围和纬度范围罢了。下面这个图可以很形象的表示出来:


:                +------------------+
:                |                  |
:               lat                 |
:                |                  |
:     (lon[0],lat[0])---- lon -----+

首先导入所需的包:


import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cartopy.crs as ccrs
from matplotlib.patches import Rectangle


然后,随便导入你要进行绘制的数据经纬度,我这里使用的是SST(海表温度):


path='D:\\sst.nc'
ds=xr.open_dataset(path).sortby("lat", ascending= True)
sst=ds.sel(lat=slice(-20,20),time=slice('2000','2010'))
# 选择矩形框的区域,矩形框的经纬度范围
region=sst.sel(lat=slice(-15,15),lon=slice(180,180+90)).sst
lon=region.lon.data
lat=region.lat.data
#定义一个绘图函数,避免以后绘制多张图时,重复输入代码
def make_map(ax, title):
    # set_extent  set crs
    ax.set_extent(box, crs=ccrs.PlateCarree())
    land = cfeature.NaturalEarthFeature('physical',
                                        'land',
                                        scale,
                                        edgecolor='grey', 
                                        facecolor='grey',
                                        zorder=2)
    ax.add_feature(land)  # set land color
    ax.coastlines(scale)  # set coastline resolution
    # set coordinate axis
    ax.set_xticks(np.arange(0, 360+45, 45),crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(-20, 30, 10),crs=ccrs.PlateCarree())
    ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))#经度0不加标识
    ax.yaxis.set_major_formatter(LatitudeFormatter())
    # plt.tick_params(labelsize=25)
    lon_formatter = LongitudeFormatter(zero_direction_label=False)  
    # zero_direction_label set 0 without E or W
    lat_formatter = LatitudeFormatter()
    ax.xaxis.set_major_formatter(lon_formatter)
    ax.yaxis.set_major_formatter(lat_formatter)
    ax.set_title(title, fontsize=25, loc='center')
    ax.tick_params(which='major', 
                    direction='out', 
                    length=8,
                    width=0.99, 
                    pad=0.2, 
                    labelsize=20,
                    bottom=True, left=True, right=False, top=False)
    return ax
# 设置绘图函数所需的参数
box = [0, 361, -20, 20]  
scale = '50m'            
xstep, ystep = 45, 10   
cmap=plt.get_cmap('jet',9)#'RdYlBu_r'  'viridis'
proj=ccrs.PlateCarree(central_longitude=180)
box_top = 45
#设置矩形框的起始点
start_point = (lon[0], lat[0])
# 进行绘图
# # #===============================开始绘图==============================
fig=plt.figure(figsize=(20,12))
ax= fig.add_axes([0.1, 0.2, 0.5, 0.5],projection = proj)
make_map(ax,' draw rectangle')
#  #  # select 矩形区域
RE=Rectangle(start_point,lon[-1]-lon[0],lat[-1]-lat[0],linewidth=2,linestyle='-' ,zorder=2,\
              edgecolor='red',facecolor='none', transform=ccrs.PlateCarree()) #25表示纬度间隔25
ax.add_patch(RE)  #添加矩形框,如果这一句求掉了就没有框显示了


运行一下代码可以发现绘制成功啦~~非常简单


62f43fe48843496786b054076413c092.png

#当然,你可以进行下面的操作,使框内增加颜色
re=Rectangle(start_point,lon[-1]-lon[0],lat[-1]-lat[0],linewidth=2,linestyle='-' ,zorder=2,\
              edgecolor='red',facecolor='blue',alpha=0.5, transform=ccrs.PlateCarree()) 
ax.add_patch(re)  

6ad45e1e08814bcaba1fe12f220176b9.png

ok,that’s all。

感兴趣的小伙伴们可以尝试。


                            一个努力学习python的海洋菜鸡
                                     水平有限,欢迎指正!!!
                                  欢迎关注、点赞、评论、收藏。


相关文章
|
数据可视化 定位技术 Python
Python基础综合案例-数据可视化(地图)
今天给大家带来的是Python综合实战开发的数据可视化操作 通过python实现对数据的分析、可视化
113 0
|
1月前
|
小程序 定位技术 Python
Python编程:根据经纬度生成并调用地图
Python编程:根据经纬度生成并调用地图
|
3月前
|
数据可视化 数据挖掘 定位技术
Python+Kepler.gl轻松制作时间轮播地图
Python+Kepler.gl轻松制作时间轮播地图
|
3月前
|
数据可视化 定位技术 开发工具
用Python快速制作海报级地图
用Python快速制作海报级地图
|
6月前
|
数据采集 JSON 数据可视化
python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示
python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示
55 1
|
6月前
|
编解码 定位技术 Python
Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
Python中ArcPy实现ArcGIS自动批量制图与地图要素批量设置
181 1
|
6月前
|
数据可视化 算法 定位技术
Python实现地图四色原理的遗传算法(GA)着色实现
Python实现地图四色原理的遗传算法(GA)着色实现
|
6月前
|
定位技术 Python
Python的pyecharts安装,导入map、geo模块,画地图
Python的pyecharts安装,导入map、geo模块,画地图
162 1
|
定位技术 Python
Python根据经纬度在地图上显示(folium)
Python根据经纬度在地图上显示(folium)
344 0
Python根据经纬度在地图上显示(folium)
|
编解码 Python
python--海温、OLR数据分布做显著性检验,绘制空间分布并打点
使用python对海洋气象数据做显著性检验,并绘制空间pattern
python--海温、OLR数据分布做显著性检验,绘制空间分布并打点