python - 等值线(contour)数值添加白色背景边框

python - 等值线(contour)数值添加白色背景边框

如下图所示,图为NCL官网实力的等值线绘图。可以观察到,图中每条等值线都带有一个白色的矩形边框,使其在黑色的等值线更加清晰明了,更具有可读性。但是,目前我还是用python比较多,希望在python中实现同样的效果。不行,再去考虑学习一下NCL进行绘图。

在这里插入图片描述
以下是实现的ncl脚本代码:

;----------------------------------------------------------------------
; conLab_8.ncl
;
; Concepts illustrated:
;   - Formatting contour line labels to force the number of digits
;   - Generating dummy data using "generate_2d_array"
;   - Making the labelbar be vertical
;   - Formatting labelbar labels using "sprintf"
;----------------------------------------------------------------------
; See tickmark example tm_8.ncl for more xxxFormat examples:
;
; http://www.ncl.ucar.edu/Applications/Images/tm_8_lg.png
;----------------------------------------------------------------------
;
; These files are loaded by default in NCL V6.2.0 and newer
; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"

begin
;---Generate some dummy data.
  data = generate_2d_array(15, 15, -100., 100., 0, (/100,100/))

;---Contour levels to use.
  data_levels = ispan(-85,85,5) + 5.587

;---Open a png file to draw graphics to.
  wks = gsn_open_wks("png","conLab")

;---Set up resources.
  res                       = True

  res@gsnMaximize           = True

  res@cnFillOn              = True        ; Turn on contour fill
  res@cnLineLabelsOn        = True        ; Turn on contour line labels

  res@cnLevelSelectionMode = "ExplicitLevels"
  res@cnLevels             = data_levels

  res@lbOrientation        = "Vertical"

  res@tiMainString         = "Default line labels and labelbar labels"
  plot = gsn_csm_contour(wks,data,res)  ; Create filled contour plot


  res@cnLineLabelFormat    = "0@;*.3f"                      ; Only one value after decimal point
  res@lbLabelStrings       = sprintf("%5.1f",data_levels)   ; Format the labelbar labels
  res@tiMainString         = "Formatted line labels and labelbar labels"

  plot = gsn_csm_contour(wks,data,res)  ; Create filled contour plot



end

python绘制等值线

首先,在python中绘制等值线,用到的函数为plt.contour(X, Y, Z, colors='black', levels=contour.levels),为其添加等值线数值的函数为,这里需要将plt.contour(X, Y, Z, colors=‘black’, levels=contour.levels)赋值为一个变量clabels

plt.clabel(clabels, inline=True, fontsize=8, 
           fmt=fmt, 
           colors='black',
           use_clabeltext=True,
           manual=False)

目前,查找了相关plt.clabel的函数,还没有找到相关的参数可以直接打开等值线数值的背景颜色,所以只能从其他方面找解决办法。首先,等值线的数值实际上就是一个个text文本,一般我们是通过matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)来实现图上文本信息的添加的,而text本身是具备添加背景色的。所以,我们只要遍历每一个等值线上的数值文本,然后设置文本的参数即可。说起来可能有点绕,但是代码上就非常易懂:

首先生成一个等值线图片,如下所示:

在这里插入图片描述
代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 创建一个带有白色背景的等值线图
fig, ax = plt.subplots(dpi=200)

contour = ax.contourf(X, Y, Z, cmap='viridis')

cbar = plt.colorbar(contour)

fmt = '%.2f' 
clabels = plt.contour(X, Y, Z, colors='black', levels=contour.levels)
plt.clabel(clabels, inline=True, fontsize=8, 
           fmt=fmt, 
           colors='black',
           use_clabeltext=True,
           manual=False)

设置等值线文本信息,实际上就是for 循环加if 判断。这里加上if判断是为了只显示想要的数值对应的背景色

[txt.set_bbox({'boxstyle': 'round', 
            'facecolor': 'w', 
            'edgecolor': 'black', 
            'pad': 0.04}) if txt.get_text() in ('0.5','0.25', '-0.5','-0.25') else txt.set_visible(False) for txt in  clabels.labelTexts]

其中,boxstyle设置文本box的风格,矩形还是圆形等;
facecoloredgecolor不说了,pad可以理解为设置矩形框的宽窄程度,可以自己调整数值测试一下效果。
最终得到的结果如下:
在这里插入图片描述
基本上是实现想要的目的,以下是全部代码:

"""
Created on Fri Oct  6 16:46:32 2023

@author: jianpu

@blog :  https://blog.csdn.net/weixin_44237337?spm=1000.2115.3001.5343

@email:  xianpu.ji@hhu.edu.cn

introduction : keep learning althongh walk slowly
"""

import numpy as np
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))

# 创建一个带有白色背景的等值线图
fig, ax = plt.subplots(dpi=200)

contour = ax.contourf(X, Y, Z, cmap='viridis')

cbar = plt.colorbar(contour)

fmt = '%.2f' 
clabels = plt.contour(X, Y, Z, colors='black', levels=contour.levels)
plt.clabel(clabels, inline=True, fontsize=8, 
           fmt=fmt, 
           colors='black',
           use_clabeltext=True,
           manual=False)

[txt.set_bbox({'boxstyle': 'round', 
            'facecolor': 'w', 
            'edgecolor': 'black', 
            'pad': 0.04}) if txt.get_text() in ('0.5','0.25', '-0.5','-0.25') else txt.set_visible(False) for txt in  clabels.labelTexts]


plt.show()

https://www.ncl.ucar.edu/Applications/contourLab.shtml

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于LDA的评论大数据的分析及主题建模

1.微博的关键词大数据采集; 已完成,待优化 2.LDA 错误1:使用了import pyLDAvis.sklearn,提示没有模块no module named pyldavis.sklearn。 默认安装 pyLDAvis3.4.1,最后降级处理,解决方式: …

云渲染是不是不吃电脑配置?对本地电脑要求高吗?

本地电脑渲染吃力,项目又急着要,没有用过的朋友会搜索: 云渲染对电脑配置要求高不高? 它的答案是:不了你是渲染动画还是效果图,都不吃电脑配置,只要你本地电脑能够做图,能够把项目的…

分析Unity崩溃日志(Android)

Unity版本: 这里Unity版本是Unity 2019.4.30f1 崩溃信息: 错误信息如下: Exception Appversion: versionName 1.0.1 versionCode 1 Process: sg.atla.f.c PID: 22716 UID: 10749 Flags: 0x3088be44 Package: sg.atla.f.c v1 (1.0.1) Fo…

如何判断光模块失效以及光模块应用注意点

1.测试光功率是否在指标要求范围之内,如果出现无光或者光功率小的现象,处理方法: A、检查光功率选择的波长和测量单位 (dbm)。 B、清洁光纤连接器端面,光模块光口。 C、检查光纤连接器端面是否发黑和划伤,光纤连接器是否存在折断&…

HTTP超详细介绍

HTTP讲解 1.HTTP的介绍2.HTTP协议的特点3.HTTP工作原理4.HTTP三点注意事项5.HTTP消息结构6.客户端请求消息7.服务端响应消息8.HTTP请求方法9.HTTP 响应头信息10.HTTP 状态码(HTTP Status Code)10.1.下面是常见的HTTP状态码10.2.HTTP状态码分类10.3.HTTP状…

【USTC】verilog 习题练习 21-25

21 基于端口名称的实例化 题目描述 创建一 verilog 电路,实现对模块 mod_a 基于端口名称的实例化,如下图所示: 其中mod_a模块的代码为: module mod_a (output out1,output out2,input in1,input in2,input in3,in…

如何批量修改图片大小尺寸?分享3个方法

如何批量修改图片大小尺寸?在日常生活中,有时候我们需要将大量的图片上传到社交媒体或应用程序上,而这些平台通常都有图片大小和尺寸的限制。通过批量修改图片大小尺寸,我们可以快速地将多张图片调整为所需的尺寸,节省…

Unity | AudioSource 无声音

Unity | AudioSource 无声音 你是否也会遇到相同的问题?AudioSource没声音? 解决: 注意查看一下几处声音设置:

做了大半年软测,上班接触不到技术性的东西,是在浪费时间吗?

最近接到粉丝私信,苦恼目前的工作状态: 来这个公司大半年,现在主要做的是类似于淘宝的购物商城,以前也做应用系统什么的,可是感觉公司的软件测试岗位都是不着边的,因为做的都是功能测试,来了这么…

Verilog刷题笔记16

题目: Since digital circuits are composed of logic gates connected with wires, any circuit can be expressed as some combination of modules and assign statements. However, sometimes this is not the most convenient way to describe the circuit. Pro…

TA百人计划学习笔记 2.8FlowMap流动效果

资料 源视频 【技术美术百人计划】图形 2.8 flowmap的实现——流动效果实现_哔哩哔哩_bilibili PPT 2800flow map 参考笔记 2.8 flowmap的实现——流动效果实现 语雀UV映射(纹理映射) 对一个贴图进行纹理查找,就要用到uv坐标 理解&#x…

排序算法8----归并排序(非递归)(C)

1、介绍 归并排序既可以是内排序(在内存上的数据排序),也可以是外排序(磁盘上)(硬盘)(在文件中的数据排序)。 其他排序一般都是内排序。 区别于快速排序的非递归&#xf…

Find My相机|苹果Find My技术与相机结合,智能防丢,全球定位

相机是一种利用光学成像原理形成影像并使用底片记录影像的设备,是用于摄影的光学器械。相机让我们能够记录下美丽的风景和珍贵的时刻。当我们到达一个迷人的地方,或者经历了一个特别难忘的时刻时,我们可以使用照相机来拍摄照片,记录下这些美好的回忆。照相机可以帮助…

软件测试面试200问(含答案)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&a…

数据守护盾牌:敏感数据扫描与脱敏,让安全合规无忧

前言 在信息时代,数据已经成为企业和组织的核心资产,其价值与日俱增。然而,随着数据使用的普及和复杂度的提升,数据安全与合规问题也变得越来越突出。敏感数据的保护显得尤为重要,因为这些数据一旦泄露或被不当使用&a…

redis数据安全(一)数据持久化

一、Redis数据安全措施: 1、将数据持久化至硬盘 2、将数据复制至其他机器; 复制是在数据持久化的基础上进行的。 二、将数据持久化至硬盘 1、介绍:Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭…

世微AP8660B 微小型升压型 DC/DC 调整器

产品概述 AP8660B是一款微小型、高效率、升压型 DC/DC 调整器 。电路由电流模COT 控制环路,误差放大器,斜坡补偿电路 ,比较器和功率开关等模块组成。该芯片可在较宽负载范围 内高效稳定的工作,内置一个 2.5A 的功率开关和软启动保…

LaTeX 多栏文档 Multiple columns如何插入图片并修改样式

在今天写报告的时候用到了 latex 的多栏列表,插入图片的时候感觉很无助 如果不喜欢让Latex自动安排图片位置,可以使用float包,然后可以使用\begin{figure}[H]。 记得提前导入这个包 \usepackage{float} 为了让我的图片的caption居中&#xf…

c语言-库函数memcpy()、memmove()、memcmp()、memset()介绍

文章目录 前言一、库函数memcpy()1.1 memcpy()介绍1.2 memcpy()模拟实现 二、库函数memmove()2.1 memmove()介绍2.2 memmove()模拟实现 三、库函数memcmp()3.1 memcmp()介绍 四、库函数memset()4.1 memset()介绍 总结 前言 本篇文章介绍c语言库函数memcpy()、memmove()、memcm…

物联网与智慧城市的无界未来:如何打破传统束缚,开启智能生活新篇章

目录 一、物联网:连接万物的技术革命 1、物联网的发展历程 2、物联网的核心技术 二、智慧城市:未来城市的蓝图与挑战 1、智慧城市的蓝图 2、智慧城市建设面临的挑战 3、应对挑战的措施 三、物联网与智慧城市的融合:打破传统束缚&…