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

news2024/11/14 6:19:33

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. 性能影响:过多使用透明效果可能会增加图像渲染的计算量,影响性能。

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

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

相关文章

某PM2项目管理系统 ExcelIn.aspx 文件上传漏洞复现

FOFA:body="PM2项目管理系统BS版增强工具.zip" 访问漏洞url抓包 上传压缩包 请求包 POST /FlowChartDefine/ExcelIn.aspx HTTP/1.1 Host: Accept-Encoding: gzip, deflate Content-Type: multipart/form-data; boundary=---------------------------335518608136…

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件(均分布局) UniformGrid和Grid有些相似,只不过UniformGrid的每个单元格面积都是相等的,不管是横向的单元格,或是纵向的单元格,它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…

自动化测试使用jenkins做CICD持续集成(docker)

1.什么是(CI/CD) 1.1持续集成 定义:频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分 交付,频繁进行集成以便更快地发现其中的错误。 每完成一点更新,就集成到主干&…

儿童活动床栏亚马逊temu美国ASTM F2085测试报告16 CFR 1224标准CPC认证办理

亚马逊temu美国站儿童活动床栏ASTM F2085-19测试报告活动床栏16 CFR 1224标准CPC认证 什么是便携式床栏杆? 便携式床栏杆是一种旨在安装在成人床上以防止儿童跌落的装置。便携式床栏适用于在没有帮助的情况下方便儿童(通常为 2 至 5 岁)上下…

编程深水区之并发①:什么是并发编程

并发编程是一种让程序能够执行多个任务的编程技术,多个任务的执行时间有重合,如交替执行、同时执行等。相对于传统的从上到下依次同步执行代码,我们也称并发编程为异步编程。目前,常见的并发模型主要有两种,一是多线程…

MySQL --- 内置函数介绍

目录 一、日期函数 二、字符串函数 三、数学函数 四、 其他函数 一、日期函数 current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime的日期部分date_add(date,interval d_value_type) 在date中添加时间/日期…

在没有备份的条件下,如何恢复微信聊天记录?

推荐2款数据恢复工具1个简单实用方法,帮你找回微信误删聊天记录! 操作简单,可用于iOS、安卓手机和PC电脑端 1、万兴数据管家 点击直达官网下载>>https://huifu.wondershare.cn 万兴数据管家是一款专业的微信数据恢复软件。 支持苹果…

鲁班上门维修安装系统源码开发之功能模式

鲁班上门维修安装系统在当今的趋势呈现出显著的增长与创新。随着物联网、智能家居的普及,以及消费者对便捷、高效生活方式的追求,鲁班上门维修安装系统凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势,赢得了市场的广泛认可。 …

「面试必看」Vue百题斩~ Vue数据响应式原理的四个核心模块

vue 响应式原理的四个核心模块 Observe Observe 要实现的目标非常简单,就是把一个普通对象转换成响应式对象。 为了实现这一点,Observe 把对象的每个属性通过 Object.defineProperty 转换为带有 setter 和 getter 的属性,这样一来&#xf…

重头开始嵌入式第十二天(预处理和指针)

预处理 在 C 语言中,预处理是指在编译之前由预处理器对源代码进行的一些处理操作。 主要包括以下几个方面: 1. 宏定义:使用 #define 指令定义一个标识符来代表一个常量值、表达式或一段代码。 例如: #define PI 3.14159 2.…

亚马逊澳大利亚站 带绳窗帘认证步骤

带绳窗帘是一种室内用窗帘,可通过一根吊绳控制升降。此类商品包括但不限于蜂窝帘、水平百叶帘、百褶帘、卷式百叶帘、卷帘、透光帘、罗马帘、帘杆(包括使用帘杆的商品,如带帘杆的窗帘和布帘)、面板轨道和垂直百叶帘。 我们的带绳窗…

vue 开发工具 Hbuilder 简介及应用

一、简介 HBuilderX 是一款流行的前端开发工具,由DCloud公司开发。它支持多种编程语言,如HTML、CSS、JavaScript、Vue、UniApp等,非常适合用来开发Web应用、移动端应用和跨平台应用。 官网地址:https://www.dcloud.io/hbuilderx.…

ShardingSphere 内核工作原理

文章目录 内核工作原理配置管控SQL Parser: SQL解析引擎SQL Router- SQL 路由引擎SQL Rewriter : SQL 优化引擎SQL Executor : SQL执行引擎Result Merger: 结果归并 内核工作原理 ShardingSphere的整体架构图是这样的: 配置管控 在进入Shar…

火车站NTP电子钟,自动授时,保证时间精准

在现代交通体系中,火车站作为重要的交通枢纽,每天承载着大量乘客的出行需求。为了确保列车运行的准时性和乘客信息的准确性,火车站NTP电子钟成为不可或缺的一部分。本文将详细介绍火车站NTP电子钟的特点及其在不同场景中的应用优势。 一、火车…

【STL】String的底层构造

1.String类对象的构造&#xff08;后面有每一个接口的实现&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char* iterator;typedef const…

字节实习面试

1.比左边的数都小&#xff0c;比右边的数都大 public class Test3 {/*** 从左往右找当前位置往左最小的* 从右往左遍历找当前位置往右最大的* 比较* param args*/public static void main(String[] args) { // int[] arr new int[]{9,8,7,3,4,2,1};int[] arr new int[…

【第十届泰迪杯数据挖掘挑战赛A题害虫识别】-农田害虫检测识别-高精度完整更新

农田害虫检测识别项目-高精度完整版 一、说明&#xff1a; 该版本为基于泰迪杯完整害虫数据重新制作数据集、优化增强数据集、重新进行模型训练&#xff0c;达到高精度、高召回率的最优模型代码。包含论文、最优模型文件以及相关文件、原始数据集、训练数据集XML版、增强扩充…

五款超好用的报表软件推荐,其中一款竟然完全免费

与以往需要通过繁琐的数据表格和复杂的数字分析不同&#xff0c;可视化报表通过表格、图表和图形&#xff0c;将数据以更加直观的方式呈现出来&#xff0c;使得原本繁杂无序的数据变得清晰易懂。无论是管理层的决策分析&#xff0c;还是一线员工的日常工作&#xff0c;可视化报…

vs+qt一些问题

一直遇到的两个问题&#xff0c;今天解决了 1、 因为前后端分离&#xff0c;前端写完了&#xff0c;后端还在一直修改&#xff0c;但是每次都是单独打开的后端的sln&#xff0c;所以会出现这个&#xff0c;把前端的模块删掉就好了。 2、打开vs项目&#xff0c;很多报错&#…

怎么在视频上加文字?归纳了简单好用的方法

怎么在视频上加文字&#xff1f;在数字媒体制作中&#xff0c;为视频添加文字是一种常见的需求。无论是为了提供字幕、注释、标题还是视觉效果&#xff0c;文字元素都能增强视频的传达力和观赏性。因此&#xff0c;今天本文将介绍四种简单好用的方法&#xff0c;帮助你轻松地在…