中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python Cartopy的基礎使用方法

發布時間:2020-11-02 15:02:03 來源:億速云 閱讀:447 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關python Cartopy的基礎使用方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

前言

常用地圖底圖的繪制一般由Basemap或者cartopy模塊完成,由于Basemap庫是基于python2開發的一個模塊,目前已經不開發維護。故簡單介紹cartopy模塊的一些基礎操作。 一、基礎介紹

首先導入相關模塊。

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

首先介紹參數projection,該命令可以配合ccrs設置投影類型,此處以方形投影命令為示例。其中central_longitude參數為投影中心位置。其中心設置與Basemap設置規則一樣,詳情可以看上一篇文章。

ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=0))

在設置好繪制類型后,繪制地圖各特征量。其代碼如下:

#ax.add_feature(cfeature.LAKES.with_scale(scale))
ax.add_feature(cfeature.OCEAN.with_scale(scale))
#ax.add_feature(cfeature.RIVERS.with_scale(scale))
#ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)

參數scale為地圖分辨率,目前支持10m,50m,110m,參數lw為線條粗細。此處繪制海岸線和海洋,效果圖如下:

python Cartopy的基礎使用方法

在繪制結束后,作為地圖。經緯度自然是必不可少的,在該模塊中,引進同時設置坐標軸標簽改變該標簽刻度的表示,具體形式如下:

ax.set_xticks(np.arange(0,361,40), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-90,90+30,30), crs=ccrs.PlateCarree())
#zero_direction_label用來設置經度的0度加不加E和W
lon_formatter = LongitudeFormatter(zero_direction_label=False)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)

可以看到效果圖如下:

python Cartopy的基礎使用方法

當然如果想對坐標軸粗細變化可以引入一下命令。

ax.outline_patch.set_visible(False)
ax.spines['bottom'].set_visible(True)
ax.spines['left'].set_visible(True)
ax.spines['right'].set_visible(True)
ax.spines['top'].set_visible(True)
ax.spines['bottom'].set_linewidth(2.5);###設置底部坐標軸的粗細
ax.spines['left'].set_linewidth(2.5);####設置左邊坐標軸的粗細
ax.spines['right'].set_linewidth(2.5);###設置右邊坐標軸的粗細
ax.spines['top'].set_linewidth(2.5);####設置上部坐標軸的粗細

應該在該模塊下,控制坐標軸的命令已經和常規不一樣。因此先關閉該控制,然后開啟常規坐標軸設置。

二、區域地圖的繪制

當我們在某一小塊區域研究時,需要繪制區域地圖。此時我們可以引入命令:

ax.set_extent(box,crs=ccrs.PlateCarree())

其中box為繪制區域,crs為投影類型。其他命令基本不變。設置box為[40,180,0,90],可得到效果圖如下:

python Cartopy的基礎使用方法

總結

為方便各位讀者,我書寫了繪制地圖的函數,大家在使用時可直接調用。此處示例為方形投影,若希望繪制其他投影。只需要修改函數部分參數即可。代碼如下:

def map_make(scale,box,xstep,ystep):
  ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
  a = (box[1]-box[0])//xstep
  x_start = box[1] - a*xstep
  a = (box[3]-box[2])//ystep
  y_start = box[3] - a*ystep
  ax.set_extent(box,crs=ccrs.PlateCarree())
  #ax.add_feature(cfeature.LAKES.with_scale(scale))
  #ax.add_feature(cfeature.OCEAN.with_scale(scale))
  #ax.add_feature(cfeature.RIVERS.with_scale(scale))
  #ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
  ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)
  
  ax.set_xticks(np.arange(x_start,box[1]+xstep,xstep), crs=ccrs.PlateCarree())
  ax.set_yticks(np.arange(y_start,box[3]+ystep,ystep), crs=ccrs.PlateCarree())
  #zero_direction_label用來設置經度的0度加不加E和W
  lon_formatter = LongitudeFormatter(zero_direction_label=False)
  lat_formatter = LatitudeFormatter()
  ax.xaxis.set_major_formatter(lon_formatter)
  ax.yaxis.set_major_formatter(lat_formatter)
  #添加網格線
  ax.grid()
  
  ax.outline_patch.set_visible(False)
  ax.spines['bottom'].set_visible(True)
  ax.spines['left'].set_visible(True)
  ax.spines['right'].set_visible(True)
  ax.spines['top'].set_visible(True)
  ax.spines['bottom'].set_linewidth(2.5);###設置底部坐標軸的粗細
  ax.spines['left'].set_linewidth(2.5);####設置左邊坐標軸的粗細
  ax.spines['right'].set_linewidth(2.5);###設置右邊坐標軸的粗細
  ax.spines['top'].set_linewidth(2.5);####設置上部坐標軸的粗細
  
  return ax

以上就是python Cartopy的基礎使用方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长武县| 古蔺县| 凯里市| 马尔康县| 曲阳县| 和林格尔县| 墨竹工卡县| 泰来县| 喀什市| 色达县| 宾阳县| 蛟河市| 石屏县| 台安县| 张家口市| 禄劝| 乐清市| 天等县| 普兰县| 嘉善县| 泸溪县| 沽源县| 新昌县| 高州市| 昌宁县| 承德县| 石台县| 聂拉木县| 喀什市| 紫云| 沿河| 陕西省| 肃南| 东安县| 进贤县| 东辽县| 江孜县| 克什克腾旗| 平阴县| 固安县| 荔浦县|