当前位置: 首页 > news >正文

matplotlib库学习之绘图透明度设置(精炼准确)

matplotlib库学习之透明颜色设置

一、简介

在数据可视化中,透明度设置可以使图表更具层次感,特别是在多层叠加图表时。matplotlib库提供了多种方法来设置图表各个部分的透明度,包括图形、文本、图例、坐标轴等部分。

二、为什么要设置成透明色?

设置透明色的主要原因包括:

  • 方便插入论文中
  • 增强视觉效果:透明度可以使图形更加柔和,避免颜色过于突兀。
  • 多图叠加:在多个图形叠加时,通过透明度可以更清晰地观察每层图形的重叠部分。
  • 突出重点:通过调整透明度,可以突出显示重点数据,使图表更加直观易懂。

三、实例

如果不做特别说明,我们遵循以下原则:

  • 所有出现的【ax】均为坐标轴对象,【figure】为画布对象;ax和figure是成对出现的,调整样式主要是使用【ax】。

    figure, ax = plt.subplots()
    
  • 所有【plt】开始的函数调用都是我们对未保存的绘图对象的图像的样式设置,这种方法不利于在有多个绘图对象时,单独处理其中一个。

3.1 实例参考模型(不透明)

import matplotlib.pyplot as plt
import numpy as np# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'# 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)# 创建图形和子图,并设置画布颜色为 #00C9A7
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='#00C9A7')ax.plot(x, y)
ax.set_title("图形透明设置-baseline-无透明参考图")
ax.legend(['正弦曲线'])plt.show()

效果:

3.2 设置【画布】透明

【3.1】所示的图,青色部分以及被绘图区遮住的区域属于画布区域。

需要注意的是,下面设置的透明效果由于施加对象是最底层的对象——画布,完全透明后用plt.show(),画布会呈现白色。如果要看到真正的效果,需要将其保存下来【plt.show()】将图片显示后是可以看到保存的按钮。

3.2.1 直接设置透明(不创建坐标轴)
plt.subplots(figsize=(10, 6), dpi=150, facecolor='none')
  • facecolor:该属性用于设置画布背景色,默认为"#FFFFFF"即白色背景。
3.2.2 创建坐标轴时设置透明
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='none')

该处设置同上,仅设置的时间不同,对绘图效果无影响。

3.2.3 利用【figure.patch.set_alpha(0)】设置画布透明
figure.patch.set_alpha(0)

其中fig是plt.figure对象,常常由下面的语句给出:

figure, ax = plt.subplots()
3.2.4 示意图

在这里插入图片描述

3.2.5 整体代码
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False# 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)plt.subplots(figsize=(10, 6), dpi=150, facecolor='none')
plt.plot(x, y, label='正弦曲线')
plt.title("图形透明设置-baseline-画布透明")
plt.legend()# fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='none')
# ax.plot(x, y)
# ax.set_title("图形透明设置-baseline-画布透明")
# ax.legend(['正弦曲线'])plt.show()

3.3 设置【绘图区背景】透明

如不特别说明,本节所有【ax】均为一个坐标轴对象

3.3.1 方法1
ax.patch.set_alpha(0)

ax.patch.set_facecolor('none')

ax.set_facecolor('none')
3.3.2 方法2
plt.rcParams['axes.facecolor'] = 'none'

该方法设置的是全局参数,即每个绘图都会绘图区背景透明;除非你单独用方法1、2、3单独设置某个绘图的参数。

3.3.3 绘图区背景透明示意图

在这里插入图片描述

3.3.4 测试代码
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False 
# plt.rcParams['axes.facecolor'] = 'none'# 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)# 创建图形和子图,并设置画布颜色为 #00C9A7
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='#00C9A7')
ax.plot(x, y)# 下面三条为测试效果语句,取消注释即可运行
# ax.patch.set_alpha(0)
# ax.set_facecolor('none')
# ax.patch.set_facecolor('none')ax.set_title("图形透明设置-绘图区背景透明")
ax.legend(['正弦曲线'])plt.show()

3.4 设置【绘制的图像】透明

3.4.1 方法1
ax.plot(x, y, alpha=0.1)
  • alpha:不透明度的设置,值越大越不透明

这里不一定是plot可以是散点图,三维图柱状图等等。

3.4.2 方法2
plt.legend(['正弦曲线'], framealpha=0)
3.4.3 示意图

在这里插入图片描述

3.4.4 测试代码
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False# 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)# 创建图形和子图,并设置画布颜色为 #00C9A7
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='#00C9A7')
ax.plot(x, y, alpha=0.1)
ax.set_title("图形透明设置-绘制的数据图像本身透明")
ax.legend(['正弦曲线'])plt.show()

3.5设置【图例】透明

3.5.1 方法1
ax.legend(['正弦曲线'], framealpha=0)
  • framealpha:用于设置图例区域的不透明度;默认情况下,图例是白框打底的。
3.5.2 方法2
plt.legend(['正弦曲线'], framealpha=0)
3.5.2 示意图

下图左右部分分别为framealpha=1framealpha=0时的效果:
在这里插入图片描述

可以看到右边部分透明了,和背景融为一体。

3.5.3 测试代码
import matplotlib.pyplot as plt
import numpy as np# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False # 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)# 创建图形和子图,并设置画布颜色为 #00C9A7
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='#00C9A7')
ax.plot(x, y)
ax.patch.set_alpha(0)ax.set_title("图形透明设置-图例透明")
ax.legend(['正弦曲线'], framealpha=0)plt.show()

3.6 设置【文本】透明

3.6.1 标题文本透明
  • 方法1
ax.set_title(title, alpha=0.5)
  • 方法2
plt.title(title, alpha=0.5)
  • 示意图

在这里插入图片描述

3.6.2 轴标签文本透明
  • 方法1
ax.set_xlabel('X Axis Label', alpha=0.5)
ax.set_ylabel('Y Axis Label', alpha=0.5)
  • 方法2
plt.xlabel("X Axis Label", alpha=0.5)
plt.ylabel("X Axis Label", alpha=0.5)
  • 示意图

3.6.3 图例文本透明
legend = ax.legend(['正弦曲线'], framealpha=0)
for text in legend.get_texts():text.set_alpha(0.1)  # 设置图例文本不透明度为 0.1
  • 示意图

3.6.4 刻度标签文本透明
  • 方法1
for label in ax.get_xticklabels() + ax.get_yticklabels():label.set_alpha(0.5)
  • 方法2
plt.setp(ax.get_xticklabels() + ax.get_yticklabels(), alpha=0.5)
  • 示意图

在这里插入图片描述

3.8 设置【坐标轴脊线】透明

3.8.1 方法1
plt.gca().spines['top'].set_alpha(0)
plt.gca().spines['right'].set_alpha(0)
plt.gca().spines['left'].set_alpha(0)
plt.gca().spines['bottom'].set_alpha(0)

或者

for spine in ['top', 'right', 'left', 'bottom']:plt.gca().spines[spine].set_alpha(0)
3.8.2 方法2
ax.spines['top'].set_alpha(0)
ax.spines['right'].set_alpha(0)
ax.spines['left'].set_alpha(0)
ax.spines['bottom'].set_alpha(0)

或者

for spine in ax.spines.values():spine.set_alpha(0)

或者

for spine in ['top', 'bottom', 'left', 'right']:ax.spines[spine].set_alpha(0)
3.8.3 示意图

在这里插入图片描述

3.8.4 部分示例代码
import matplotlib.pyplot as plt
import numpy as np# 统一设置
title = '图形透明设置-坐标轴脊线透明'# 设置中文字体
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False# 生成数据
x = np.linspace(0, 20, 100)
y = np.sin(x)# 创建图形和子图,并设置画布颜色为 #00C9A7
fig, ax = plt.subplots(figsize=(10, 6), dpi=150, facecolor='#00C9A7')
ax.plot(x, y)
ax.patch.set_alpha(0)ax.set_title(title, alpha=1)
ax.legend(['正弦曲线'], framealpha=0)
for spine in ax.spines.values():spine.set_alpha(0)# fig.savefig(f'保存的图片\\{title}.png', dpi=300)
# plt.show()

3.9 设置【刻度线】透明

3.9.1 方法
ax.tick_params(left=False, right=False, top=False, bottom=False)

其实这也不算透明了,是直接取消掉了

3.9.2 示意图

在这里插入图片描述

3.10 保存图像为透明

3.10.1 代码
plt.savefig("transparent_plot.png", transparent=True)
3.10.2 示意图

在这里插入图片描述

四、注意事项

  1. 透明度范围:透明度的取值范围为0到1,其中0表示完全透明,1表示完全不透明。如果参数是表示不透明度,那么和此处效果描述相反。
  2. 保存透明图像:在保存图像时,如果设置了transparent=True,整个图像的背景将是透明的。
  3. 图表叠加:在多图叠加时,合理设置透明度可以使图表更加美观,但要注意透明度过低可能导致图形难以辨识。
  4. 性能影响:过多使用透明效果可能会增加图像渲染的计算量,影响性能。

相关文章:

matplotlib库学习之绘图透明度设置(精炼准确)

matplotlib库学习之透明颜色设置 一、简介 在数据可视化中,透明度设置可以使图表更具层次感,特别是在多层叠加图表时。matplotlib库提供了多种方法来设置图表各个部分的透明度,包括图形、文本、图例、坐标轴等部分。 二、为什么要设置成透明…...

select多路复用(tcp通信)

文章目录 项目名称项目结构 项目名称 io_demo1 项目结构 $ tree . ├── build ├── CMakeLists.txt ├── debug.gdb ├── include │ ├── mysocket.h │ ├── tcp_client.h │ └── tcp_server.h ├── sources │ └── server.cpp └── src├─…...

STM32IIC与SPI详解

单片机里的通信协议其实蛮多的,IIC;SPI;MQTT;CAN;包括串口也是一种通信协议。而串口通信虽然实现了全双工,但需要至少三根线,为了节省这一根线的成本,于是IIC诞生了。 目录 一.IIC…...

K8s第三节:k8s1.23.1升级为k8s1.30.0

上回书说到我们使用了kubeadm安装了k8s1.23.1,但是在k8s1.24之前还是使用docker作为容器运行时,所以这一节我打算将我安装的k8s集群升级为1.30.0版本; 1、修改containerd 配置 因为我们安装的docker自带containerd,所以我们不需要重新安装con…...

.gitignore不生效的解决方案

为什么会不生效 因为文件已经被git追踪(或者说被track 或者说被索引,都是一个意思)。 目前.gitignore面对已经被git追踪的文件是无法生效的。(这是现状,我们只能接收这个现状。不过个人觉得git官方可以对这方面进行优化调整,让其…...

脱胎于 S 语言的R语言,Ross Ihaka 和 Robert Gentleman 和社区的力量让 R 在学术界与研究机构放光彩

R语言从一门用于统计学教学的编程语言,发展成为全球数据科学领域的重要工具,离不开其强大的功能、丰富的社区资源和开源精神。这些都离不开Ross Ihaka 和 Robert Gentleman 和 社区的力量。 在1990年代初,新西兰奥克兰大学的统计学教授Ross I…...

JavaEE 第6节 内存可见性问题以及解决方法

目录 一、什么是内存可见性问题? 1、问题代码演示 2、基础知识铺垫 1)硬件层面 2)模型层面(JMM) 二、内存可见性问题的原因 三、volatile解决内存可见性问题 一、什么是内存可见性问题? 1、问题代码…...

es基本操作

以下是一些 Elasticsearch 常用的命令,涵盖了索引管理、数据操作和集群管理等方面: 基本操作 检查集群状态: curl -X GET "localhost:9200/_cluster/health?pretty"查看集群健康状态和基本信息。 查看所有索引: curl…...

开源 AI 智能名片 S2B2C 商城小程序赋能下的社区团购商业模式研究

摘要:本文深入探讨了社区团购商业模式的本质、特点及其优势,并详细分析了开源 AI 智能名片 S2B2C 商城小程序在社区团购中的应用与价值。通过对相关案例的研究和数据的分析,揭示了这一创新组合对社区商业生态的重要影响,为未来社区…...

AutoSar AP软件规范中CM介绍及功能概要

1. 前言 为了理解AutoSar AP中EM的概念,生搬硬套的翻译了《 AUTOSAR SWS CommunicationManagement.pdf》的介绍部分,并按照自己的理解进行了修改。如下 2. AUTOSAR_SWS_CommunicationManagement.pdf的介绍部分 本文件包含AUTOSAR AP通信管理的功能、A…...

【图形学】TA之路-向量

向量 向量 是一个有大小和方向的数学对象。在三维空间中,向量通常表示为 (v_x, v_y, v_z)。 基本操作 加法: a b (a_x b_x, a_y b_y, a_z b_z)减法: a - b (a_x - b_x, a_y - b_y, a_z - b_z)标量乘法: k * v (k * v_x, …...

[flink]部署模式

部署模式 在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。 Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(Session Mode)、单作业模式(Per-Job Mode&…...

为什么不用postman做自动化

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

一、Matlab基础

文章目录 一、Matlab界面二、Matlab窗口常用命令三、Matlab的数据类型3.1 数值类型3.2 字符和字符串3.3 逻辑类型3.4 函数句柄3.5 结构类型3.6 细胞数组 四、Matlab的运算符4.1 算术运算符4.2 关系运算符4.3 逻辑运算4.4 运算符优先级 五、Matlab的矩阵5.1 矩阵的建立5.2 矩阵的…...

执行java -jar命令,显示jar中没有主清单属性

在Java中,一个"主清单属性"(Main-Class attribute)是指定JAR文件中包含的应用程序入口点,即包含main方法的类的完全限定名。如果你尝试运行一个没有主清单属性的JAR文件,你可能会看到错误消息,如…...

【C++进阶】红黑树

目录 什么是红黑树?红黑树红黑树的性质 定义红黑树红黑树的操作insertinorderfindheightsize构造函数析构函数赋值拷贝判断红黑树 全部代码总结 什么是红黑树? 红黑树 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树&#xff…...

linux使用ssh连接一直弹出密码框问题

1.查看ssh服务的状态 输入以下命令: sudo service sshd status 小编已经安装了。 如果出现 Loaded: error (Reason: No such file or directory) 提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。 如果出现 Active: in…...

Python 3 数据结构

Python 3 数据结构 引言 Python 是一种高级编程语言,因其简洁明了的语法和强大的功能而广受欢迎。在 Python 中,数据结构是组织和存储数据的方式,对于编写高效和可维护的代码至关重要。本文将深入探讨 Python 3 中的主要数据结构&#xff0…...

【开源社区】Elasticsearch(ES)中空值字段 null_value 及通过exists查找非空文档

文章目录 0、声明1、问题描述2、问题剖析2.1 NULL或者空值类型有哪些2.2 案例讲解:尝试检索值为 null 的字段2.3 解决思路 3、使用 null_value 的诸多坑(避免生产事故)3.1 null_value 替换的是索引,并不会直接替换源数据3.2 不支持…...

JavaDS —— 位图(BitSet)与 布隆过滤器

位图 引入问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 首先要注意 40 亿个数据如果使用 整型(int) 来存放的话,就是要 40 亿个整型,一个整型有…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...