极投影ax.contourf

news2024/9/19 10:38:47

 我想用极投影画个类似下面这样的效果图,首先底图是一个这样的,然后再有需要的地方做标记,比如斜线和渔网状的东西。

 但是我怎么尝试都是得到了一个下面这样的图这样肯定有问题

我调整为画轮廓线之后变成下面这样的图,我猜想应该是经纬度-180和180无法接上的问题。

上网搜索也没有什么好的结果,但是我忽然想到可以把要标记的区域分成两部分来做,这样规避掉这个问题。注意我之前写的是-180 0 0 180,但是还是失败了,改为下面这个和理想画出来的差异不大。

mask1 = (lons > -175) & (lons < 5) &(second_image<0.1)
mask2 = (lons > 5) & (lons < 175) & (second_image<0.1)

 最后的代码

import numpy as np
import matplotlib.pyplot as plt
import rasterio
from rasterio.plot import show
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import matplotlib.ticker as mticker
import matplotlib.patches as mpatches
from pyproj import Proj, Transformer
import cmaps
import matplotlib.colors as mcolors

# 设置全局字体样式和大小
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.size'] = 22
# GeoTIFF文件路径
first_image_path = r'C:\Users\2016_2022_01_04_rela.tif'
second_image_path = r'C:\Users\2016_2022_01_04_pvalue.tif'

# 读取第一张GeoTIFF图像
with rasterio.open(first_image_path) as src:
    first_image = src.read(1)
    first_image[first_image<-1] = np.nan
    # first_image[first_image > 1] = np.nan
    transform = src.transform
    crs = src.crs
 
# 读取第二张GeoTIFF图像
with rasterio.open(second_image_path) as src:
    second_image = src.read(1)
    second_image[np.isnan(first_image)] = np.nan
    pvalue_mask = second_image < 0.1
    
    # pvalue_mask[pvalue_mask==0]=np.nan

# 获取经纬度网格
# first_image[second_image > 0.05]=np.nan

height, width = first_image.shape
cols, rows = np.meshgrid(np.arange(width), np.arange(height))
xs, ys = rasterio.transform.xy(transform, rows, cols)
xs = np.array(xs)
ys = np.array(ys)
# 转换为经纬度
proj = Proj(crs)
transformer = Transformer.from_proj(proj, Proj(proj='latlong', datum='WGS84'))
lons, lats = transformer.transform(xs, ys)

# 绘制极地投影地图
fig, ax = plt.subplots(figsize=(10, 10), subplot_kw={'projection': ccrs.NorthPolarStereo(central_longitude=-45.0)},dpi=300)
# 绘制地图
# fig, ax = plt.subplots(figsize=(10, 10), subplot_kw={'projection': ccrs.Stereographic(central_longitude=-45.0, true_scale_latitude=70.0)}, dpi=300)
ax.set_extent([-180, 180, 60, 90], ccrs.PlateCarree())

# 添加海岸线和网格线
ax.add_feature(cfeature.COASTLINE.with_scale('110m'))
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=1, color='gray', linestyle='--')
gl.top_labels = True
gl.right_labels = True
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
gl.xlabel_style = {'size': 20, 'color': 'black', 'rotation': 0}
gl.ylabel_style = {'size': 20, 'color': 'black', 'rotation': 0}
gl.xlocator = mticker.FixedLocator(np.linspace(-180, 180, 13))
gl.ylocator = mticker.FixedLocator(np.linspace(60, 90, 4))


# # 设置颜色条参数
# levels = np.arange(-1, 1.2, 0.2)  # 设置颜色条的等级
# cmap = plt.get_cmap('jet', len(levels) - 1)  # 使用 'jet' 颜色映射并设置颜色数量
# norm = mcolors.BoundaryNorm(boundaries=levels, ncolors=len(levels) - 1)  # 创建 BoundaryNorm 对象

# cmap =cmaps.hotcold_18lev
# 获取原始颜色映射
original_cmap = cmaps.hotcold_18lev

# 提取颜色映射中的颜色
n_colors = original_cmap.N
colors = original_cmap(np.linspace(0, 1, n_colors))

# 插入白色到颜色映射中间
white_color = np.array([1, 1, 1, 1])  # 白色
middle_index = n_colors // 2

# 插入白色
new_colors = np.insert(colors, middle_index, white_color, axis=0)
cmap = mcolors.LinearSegmentedColormap.from_list('hotcold_with_white', new_colors, N=n_colors + 1)

# cmaps.BlueDarkRed18
c1 = ax.pcolormesh(lons, lats, first_image, cmap=cmap, transform=ccrs.PlateCarree(), vmin=-1, vmax=1)# 绘制第一个图像数据
# c1 = ax.pcolormesh(lons, lats, first_image, cmap=cmap, norm=norm, transform=ccrs.PlateCarree())



pvalue_lons, pvalue_lats = lons[pvalue_mask], lats[pvalue_mask]
mask1 = (lons > -175) & (lons < 5) &(second_image<0.1)
mask2 = (lons > 5) & (lons < 175) & (second_image<0.1)



# 使用 contourf 创建填充图
contour = ax.contourf(
    lons, lats, mask1, 
    level=[.5,1.5],  # 设置级别来仅显示感兴趣的区域
    colors='none',     # 不用颜色填充
    hatches=['','+++'],   # 使用斜线填充
    alpha=0,
    transform=ccrs.PlateCarree()
)
contour = ax.contourf(
    lons, lats, mask2, 
    level=[.5,1.5],  # 设置级别来仅显示感兴趣的区域
    colors='none',     # 不用颜色填充
    hatches=['','///'],   # 使用斜线填充
    alpha=0,
    transform=ccrs.PlateCarree()
)

# 添加海岸线和网格线
# position=fig.add_axes([0.2, 0.15, 0.5, 0.045])#图标位置
font = {'family' : 'serif',
         'color'  : 'darkred',
         'weight' : 'normal',
         'size'   : 16,
         }

# 添加颜色条
cbar=fig.colorbar(c1,orientation='horizontal',extend='both')#设置图标,format='%.1f'
# cbar = plt.colorbar(c1, orientation='horizontal', pad=0.05, aspect=50)
cbar.set_label('Pearson correlation')
# 设置刻度
ticks = [-1, -0.5, 0, 0.5, 1]
cbar.set_ticks(ticks)
cbar.set_ticklabels([f'{tick:.1f}' for tick in ticks])

# 显示图像
plt.show()
# fig.savefig(r'C:\Users\relationshipwith_2mt.jpg', dpi=300, bbox_inches='tight')#保存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(073)

目录 一、用法精讲 296、pandas.Series.dt.as_unit方法 296-1、语法 296-2、参数 296-3、功能 296-4、返回值 296-5、说明 296-6、用法 296-6-1、数据准备 296-6-2、代码示例 296-6-3、结果输出 297、pandas.Series.dt.days属性 297-1、语法 297-2、参数 297-3、…

Ansys Mechanical|解决温度场-电场耦合问题

一.多物理场耦合分析的必要性 你是否曾经碰到过你的模型受到两个或者更多物理因素影响的情况吗&#xff1f;这些物理因素不仅会相互影响&#xff0c;还会影响计算结果。 这时多物理场分析就有用了。在解决多物理场影响的工程问题时&#xff0c;多物理场耦合分析是必要的。 举…

IO进程----标准IO

目录 IO进程 标准IO 1. 概念&#xff1a; 2. 特点&#xff1a; 3. 缓存区 3.1. 行缓存&#xff1a;和终端操作相关 刷新缓存的条件&#xff1a; 1) 程序正常退出 2) \n刷新 3) 缓存区满刷新 4) 强制刷新 fflush 3.2. 全缓存&#xff1a;和文件操作相关 3.…

【C++】模版详解

1、概念 C模版分两类&#xff1a;函数模版和类模版 1&#xff09;函数模板的格式 template <class 形参名&#xff0c;class 形参名&#xff0c;......> 返回类型 函数名(参数列表) {函数体 }例如&#xff1a; template <class T> void swap(T& a, T& b…

android13 关闭selinux 临时关闭或者永久关闭

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 2.1 临时关闭 2.2 永久关闭 3.修改方法 3.1 临时修改 3.2 永久关闭 4.编译测试 5.彩蛋 1.前言 在Android操作系统中,SELinux(Security-Enhanced Linux)是一种安全模块,用于提供强制访问控制(MAC)安全…

为什么不用postman做自动化

面试的时候被问到&#xff1a;为什么不用postman做自动化 打开postman&#xff0c;看到用例集管理、API 管理、环境管理这三个功能&#xff0c;用户体验感算得上品牌等级了 为什么不用呢&#xff0c;文心一言给了一些答案 不适合大规模自动化测试&#xff1a;Postman 主要是为…

AI大模型排行榜(gpt-4o-2024-08-06)

https://github.com/yuchenlin/ZeroEval/blob/main/result_dirs/mmlu-redux.summary.md 人工智能学习网站 https://chat.xutongbao.top

学习日志8.8--防火墙精细化策略管控

本次实验的拓扑结构&#xff0c;用PC2去模拟和外部网络连接的Internet。 在trust和untrust区域上&#xff0c;希望将防火墙安全策略的默认动作修改为deny&#xff0c;然后精细化控制流量的访问&#xff0c;从trust到untrust控制只允许192.168.1.0的网络通过&#xff0c;从untr…

Spring Boot 3.x Filter实战:记录请求日志

上一篇&#xff1a;Spring Boot 3.x Web单元测试最佳实践 前面我们在《Spring Boot 3.x Rest API最佳实践之统一响应结构》中学习响应的统一拦截处理&#xff0c;顺带完成了响应结果的记录&#xff1b;而对于请求内容咱们也必须进行日志记录&#xff0c;以确保排查问题时有据可…

又一苹果经典产品宣布停产,老用户满满的回忆

苹果公司的SuperDrive&#xff0c;作为一项曾经引领潮流的外置光驱技术&#xff0c;自2008年伴随着革命性的MacBook Air轻盈登场以来&#xff0c;便成为了苹果电脑产品线中一道亮丽的风景线&#xff0c;象征着科技与美学的完美结合。 这款光驱以其超薄的设计、高效的读写速度以…

leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝

题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图&#xff0c;每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径&#xff0c;但这条路径最多只能经过 k 个中转站。你需要返回这…

构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用

随着5G、AI、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;全新的行业生态AIoT正在引领一场深刻的变革。在这场变革中&#xff0c;EasyCVR视频流媒体技术以其强大的视频处理、汇聚与融合能力&#xff0c;在智能分…

2024年计算机类学术会议有哪些

随着科技的飞速发展&#xff0c;计算机科学与技术领域正以前所未有的速度进步&#xff0c;各类学术会议成为了交流最新研究成果、探讨前沿技术趋势的重要平台。2024年&#xff0c;全球范围内将举办多场计算机类学术会议&#xff0c;这些会议不仅汇聚了顶尖的专家学者&#xff0…

创客匠人老蒋:你缺的不是客户,缺的是单个客户的营销和变现能力

老蒋创客圈第58期对话标杆直播连麦&#xff0c;我们邀请到【拾才易人】平台创始人侯邦辉老师。侯老师与创客匠人合作3年之久&#xff0c;实现了线上线下高转化&#xff0c;并实现家庭教育、心理疗愈、国学传承与营销运营一站式学习平台。 上篇文章&#xff0c;我们主要梳理了连…

Gemma Scope 帮助理解 AI 模型的内部工作原理

Gemma Scope 工具如何帮助理解 AI 模型&#xff08;具体来说是 Gemma 模型&#xff09;的内部工作原理&#xff0c;通过观察模型的“特征”来理解 AI 是如何“思考”的 1 特征&#xff08;features&#xff09; 了解AI模型在思考什么。Gemma Scope 将 Gemma 模型的大脑分解成…

延时队列与redis and rabbitmq

延时队列是什么 延时队列&#xff08;Delay Queue&#xff09;是一种特殊的消息队列&#xff0c;它允许你在添加消息时设置一个延时时间&#xff0c;消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用&#xff0c;常用于处理需要在指定时间后执行的任务&am…

光耦合器知识概述

光耦合器&#xff0c;又称光电耦合器&#xff0c;是一种通过光信号来实现电信号隔离的电子元件。它在确保电路安全和信号完整性方面起着关键作用&#xff0c;广泛应用于电源管理、工业自动化、消费电子等领域。本文将深入探讨光耦合器的工作原理、技术参数、应用场景、选型指南…

【JAVA入门】Day19 - BigInteger 和 BigDecimal

【JAVA入门】Day19 - BigInteger 和 BigDecimal 文章目录 【JAVA入门】Day19 - BigInteger 和 BigDecimal一、BigInteger1.1 BigInteger 构造方法1.2 BigInteger 内部常见方法 二、BigDecimal2.1 BigDecimal 的作用2.2 BigDecimal 对象的获取2.3 BigDecimal 中常见的成员方法2.…

自动驾驶计算芯片企业“流血”上市,小米、腾讯等曾投7亿美元

"自动驾驶市场何时迎来爆发&#xff1f;" 作者 | 魏 强 编辑 | 卢旭成 今天&#xff0c;自动驾驶计算芯片企业Black Sesame International HoldingLimited(黑芝麻智能)在港交所上市&#xff0c;发行价28港元&#xff0c;募资总额10.36亿港元。 黑芝麻智能号称国…

牛客周赛 Round 54 (个人题解)(待补全)

前言&#xff1a; 如今已经回到返校回家&#xff0c;在家中的学习热情明显下降&#xff0c;在加上练车、和朋友亲戚聚一聚&#xff0c;学习的时间明显下降&#xff0c;希望自己能更加努力一点吧&#xff0c;之后想通过发博客来监督自己在暑假家中的努力&#xff0c;希望自己能做…