首页 > 其他分享 >Basemap改成cartopy。

Basemap改成cartopy。

时间:2023-12-26 21:13:05浏览次数:34  
标签:plt label pltday cbar cartopy np 改成 Basemap cs

因为mac安装不上basemap。画图也是在自己电脑上画图方便些。所以将basemap改成cartopy。


由于你不能使用 Basemap,我建议使用 cartopy 库作为替代。cartopy 是一个用于绘制地图和进行地理空间数据分析的Python库,与Basemap类似,但得到了更好的维护和支持。

修改之前--点击查看代码
# ------------------------------------------------------------------
# Figure 2: spatial distributions for predictions and observations
# ------------------------------------------------------------------
# if plt_f in ['Fig.2']:
# 	plt.figure
# 	#global
# 	plt.subplot(1,2,1)
# 	lon, lat = np.meshgrid(lon_, lat_)
# 	m = Basemap(llcrnrlon=np.min(lon),
#                 llcrnrlat=np.min(lat),
#                 urcrnrlon=np.max(lon),
#                 urcrnrlat=np.max(lat))
# 	m.drawcoastlines()
# 	m.drawcountries()
# 	parallels = np.arange(-90.,90,18.)
# 	meridians = np.arange(-180.,179.,36.)
# 	m.drawparallels(parallels, labels=[False, True, True, False], dashes=[1, 400])
# 	m.drawmeridians(meridians, labels=[True, False, False, True], dashes=[1, 400])
# 	xi, yi = m(lon, lat)
# 	print('--------------------')
# 	print(xi)
# 	y_pred_pltday = y_pred[pltday, :,:]
# 	y_pred_pltday[mask==0]=-9999
# 	if cfg['label'] == ["volumetric_soil_water_layer_1"] or cfg['label'] == ["volumetric_soil_water_layer_2"]  or cfg['label'] == ["volumetric_soil_water_20cm"]:
# 		cs = m.contourf(xi,yi, y_pred_pltday, np.arange(0, 0.6, 0.05), cmap='YlGnBu')
# 		cbar = m.colorbar(cs, location='bottom', pad="10%")
# 		cbar.set_label('m$^{3}$/m$^{3}$')
# 	elif cfg['label'] == ["surface_sensible_heat_flux"]:
# 		cs = m.contourf(xi,yi, y_pred_pltday, np.arange(-140, 141, 20), cmap='jet')
# 		cbar = m.colorbar(cs, location='bottom', pad="10%")
# 		cbar.set_label('W/m$^{2}$')
# 	plt.title(name_pred)
#
# 	# observations
# 	plt.subplot(1,2,2)
# 	m = Basemap(llcrnrlon=np.min(lon),
#                 llcrnrlat=np.min(lat),
#                 urcrnrlon=np.max(lon),
#                 urcrnrlat=np.max(lat))
# 	m.drawcoastlines()
# 	m.drawcountries()
# 	parallels = np.arange(-90.,90.,18.)
# 	meridians = np.arange(-180.,179.,36.)
# 	m.drawparallels(parallels, labels=[False, True, True, False], dashes=[1, 400])
# 	m.drawmeridians(meridians, labels=[True, False, False, True], dashes=[1, 400])
# 	xi, yi = m(lon, lat)
# 	print('xi is',xi)
# 	y_test_pltday = y_test[pltday, :,:]
# 	y_test_pltday[mask==0]=-9999
# 	if cfg['label'] == ["volumetric_soil_water_layer_1"] or cfg['label'] == ["volumetric_soil_water_layer_2"]  or cfg['label'] == ["volumetric_soil_water_20cm"]:
# 		cs = m.contourf(xi,yi, y_test_pltday, np.arange(0, 0.6, 0.05), cmap='YlGnBu')
# 		cbar = m.colorbar(cs, location='bottom', pad="10%")
# 		cbar.set_label('m$^{3}$/m$^{3}$')
# 	elif cfg['label'] == ["surface_sensible_heat_flux"]:
# 		cs = m.contourf(xi,yi, y_test_pltday, np.arange(-140, 141, 20), cmap='jet')
# 		cbar = m.colorbar(cs, location='bottom', pad="10%")
# 		cbar.set_label('W/m$^{2}$')
# 	plt.title(name_test)
# 	#plt.savefig(out_path + name_test + '_spatial distributions.png')
# 	print('Figure 2 : spatial distributions for predictions and observations completed!')
# 	plt.show()
修改之后--点击查看代码
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import numpy as np

# 确保这些变量已经定义
# lon_, lat_, y_pred, pltday, mask, cfg, name_pred, y_test, name_test

if plt_f in ['Fig.2']:
    # 设置图形的大小
    plt.figure(figsize=(12, 6))

    # 第一个子图 - 预测
    ax1 = plt.subplot(1, 2, 1, projection=ccrs.PlateCarree())
    ax1.coastlines()
    ax1.set_global()
    xi, yi = np.meshgrid(lon_, lat_)
    
    y_pred_pltday = y_pred[pltday, :, :]
    y_pred_pltday[mask == 0] = np.nan  # 使用NaN来处理无数据的区域

    # 根据不同的配置绘制不同的数据
    if cfg['label'] in [["volumetric_soil_water_layer_1"], ["volumetric_soil_water_layer_2"], ["volumetric_soil_water_20cm"]]:
        cs = ax1.contourf(xi, yi, y_pred_pltday, np.arange(0, 0.6, 0.05), cmap='YlGnBu')
        cbar = plt.colorbar(cs, orientation='horizontal', pad=0.05, aspect=50)
        cbar.set_label('m$^3$/m$^3$')
    elif cfg['label'] == ["surface_sensible_heat_flux"]:
        cs = ax1.contourf(xi, yi, y_pred_pltday, np.arange(-140, 141, 20), cmap='jet')
        cbar = plt.colorbar(cs, orientation='horizontal', pad=0.05, aspect=50)
        cbar.set_label('W/m$^2$')

    plt.title(name_pred)

    # 第二个子图 - 观测
    ax2 = plt.subplot(1, 2, 2, projection=ccrs.PlateCarree())
    ax2.coastlines()
    ax2.set_global()

    y_test_pltday = y_test[pltday, :, :]
    y_test_pltday[mask == 0] = np.nan  # 使用NaN来处理无数据的区域

    # 根据不同的配置绘制不同的数据
    if cfg['label'] in [["volumetric_soil_water_layer_1"], ["volumetric_soil_water_layer_2"], ["volumetric_soil_water_20cm"]]:
        cs = ax2.contourf(xi, yi, y_test_pltday, np.arange(0, 0.6, 0.05), cmap='YlGnBu')
        cbar = plt.colorbar(cs, orientation='horizontal', pad=0.05, aspect=50)
        cbar.set_label('m$^3$/m$^3$')
    elif cfg['label'] == ["surface_sensible_heat_flux"]:
        cs = ax2.contourf(xi, yi, y_test_pltday, np.arange(-140, 141, 20), cmap='jet')
        cbar = plt.colorbar(cs, orientation='horizontal', pad=0.05, aspect=50)
        cbar.set_label('W/m$^2$')

    plt.title(name_test)

    # 显示图形
    plt.show()

标签:plt,label,pltday,cbar,cartopy,np,改成,Basemap,cs
From: https://www.cnblogs.com/xinxuann/p/17929357.html

相关文章

  • html jquery from 表单提交 application/x-www-form-urlencoded 改成 json
    htmljqueryfrom表单提交$(form).ajaxSubmitapplication/x-www-form-urlencoded改成json<formclass="formform-horizontal"id="form-admin-add"><divclass="rowcl"><labelclass="form-labelcol-xs-4col-......
  • win10 dos命令窗口输出中文乱码(将黑窗口改成UTF-8编码)
    1.情景展示在开发过程中,我们通常使用UTF-8编码。然鹅,操作系统默认字符集是GBK,这导致在黑窗口下出现的中文,以乱码的形式展现。如何解决?2.具体分析如何查看命令窗口的字符集?方式一win+r-->输入:cmd,打开黑窗口。运行:chcp,按回车键,可以得到:936,936对应的就是简体中文,也是windo......
  • 脚本 给kubeadm安装的k8s集群 进行证书的延期 从1年改成10年
    请谨慎使用先测试#!/bin/bashset-oerrexitset-opipefail#set-oxtracelog::err(){printf"[$(date+'%Y-%m-%dT%H:%M:%S.%N%z')]:\033[31mERROR:\033[0m$@\n"}log::info(){printf"[$(date+'%Y-%m-%dT%H:%M:%S.%N%z'......
  • 数据过多时候,子查询改成left join减少笛卡尔积
    子查询SELECT cn.portal_idASportalId, count(id)ASnumFROM construction_package_wbs_nodecnWHERE cn.delete_flag=0 AND( cn.node_type='单位工程' ORcn.node_type='分部工程' ORcn.node_type='分项工程' ORcn.no......
  • win10家庭版修改成专业版
    家庭版和专业版的区别:Windows家庭版和专业版简单点说就是证书不同,用家庭版的密钥激活就是家庭版,用专业版密钥激活。 方法:修改成专业版的产品密钥专业版所需要的内容其实已经下载在本地了,我们只需要激活安装即可,专业版和家庭版的区别在于证书不同。首先断开网络,然后找到:设置-......
  • c++跨文件修改成员变量
    如果在一个文件中有一个成员变量,需要在另外一个文件中修改这个成员变量。把这个成员变量加一个static变成静态成员变量即可。如下所示:在A.cpp中有student类classstudent{public:student();public://声明静态成员函数staticintgetTotal();staticfloat......
  • 2023-08-24:请用go语言编写。给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续
    2023-08-24:请用go语言编写。给定一个长度为n的数组arr,现在你有一次机会,将其中连续的K个数全修改成任意一个值,请你计算如何修改可以使修改后的数列的最长不下降子序列最长。请输出这个最长的长度。最长不下降子序列:子序列中的每个数不小于在它之前的数。1<=k,n<=10^5,1<=a......
  • 微信小程序--5. 如下图将顶部导航栏的地方改成自定义样式
    5.如下图将顶部导航栏的地方改成自定义样式1)配置app.json{"window":{"navigationStyle":"custom"//增加这行}} 2)、封装顶部导航栏的样式创建组件文件夹及文件miniprogram\components\navigation-bar\index//components/navigation-bar/index.wxml<!......
  • 用system账户修改过Oracle密码期限,改成unlimited 后来新建的账户的密码期限也是unlimi
    https://www.cnblogs.com/hooly/p/14171716.htmlhttps://blog.csdn.net/wang13145/article/details/106660266用system账户修改过Oracle密码期限,改成unlimited后来新建的账户的密码期限也是unlimited吗?......
  • 板娘代码(lived2需要改成自己电脑路径)
    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    <title>Live2D</title>    <link rel="......