python画图|曲线分段设置颜色基础教程

news2024/12/23 10:48:41

前期已经学习了大量的python画图教程,但颜色的设计一直是次要角色,今天我们就一起学习一下如何对图形分段设置颜色。

一些前期通过颜色区分图形的文章链接如下:

python画图|极坐标下的3D surface_python 根据经纬度 海拔高度 绘制三维立体-CSDN博客

python画图|极坐标中画直方图_ax1.plot()怎么画直方图-CSDN博客

【1】官网教程

首先打开官网教程,学习曲线分段颜色设置:

https://matplotlib.org/stable/gallery/color/color_by_yvalue.html

官网教程的代码非常简单,因此尝试做了注解。

【2】代码解读

首先是计算模块numpy和绘图模块matplotlib的引入。

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

然后简单定义了变量:

t = np.arange(0.0, 2.0, 0.01) #定义自变量
s = np.sin(2 * np.pi * t) #定义因变量

之后设定了曲线颜色分段的上下标准:

upper = 0.77 #定义上标准线
lower = -0.77 #定义下标准线

 再之后定义了如何将曲线划分为3段,使用了np.ma.masked_where()函数:

supper = np.ma.masked_where(s < upper, s) #输出大于upper的值
slower = np.ma.masked_where(s > lower, s) #输出小于lower的值
smiddle = np.ma.masked_where((s < lower) | (s > upper), s) #输出介于(lower,upper)之间的值

supper取到比upper大的值;

slower取到比lower小的值;

smiddle取到介于lower和upper之间的值。

基于上述三个操作,实现将曲线分为三段。

最后定义了画图和输出图形:

fig, ax = plt.subplots() #定义画图
ax.plot(t, smiddle, t, slower, t, supper) #定义画所有图形
plt.show() #输出图形

最后的输出图形为:

4b725c66707249d285b9c6ec24df853e.png

图1

至此,完整代码加注释为:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

t = np.arange(0.0, 2.0, 0.01) #定义自变量
s = np.sin(2 * np.pi * t) #定义因变量

upper = 0.77 #定义上标准线
lower = -0.77 #定义下标准线

supper = np.ma.masked_where(s < upper, s) #输出大于upper的值
slower = np.ma.masked_where(s > lower, s) #输出小于lower的值
smiddle = np.ma.masked_where((s < lower) | (s > upper), s) #输出介于(lower,upper)之间的值

fig, ax = plt.subplots() #定义画图
ax.plot(t, smiddle, t, slower, t, supper) #定义画所有图形
plt.show() #输出图形

【3】代码修改

【3.1】np.ma.masked_where()函数

由前述分析可知,np.ma.masked_where()函数可实现对函数分段。

为测试该功能,在编辑器(比如pycharm)中输入以下代码:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

t = np.arange(0.0, 6.0, 1) #定义自变量
s =  2*t #定义因变量

upper = 6 #定义上标准线
lower = 2 #定义下标准线

supper = np.ma.masked_where(s < upper, t) #输出大于upper的值
slower = np.ma.masked_where(s > lower, s) #输出小于lower的值
smiddle = np.ma.masked_where((s < lower) | (s > upper), s) #输出介于(lower,upper)之间的值

print('supper=\n',supper)
print('slower=\n',slower)
print('smiddle=\n',smiddle)

在这里,首先是将自变量t的取值范围限定在[0,1,2,3,4,5]之间,对应s的取值范围为[0,2,4,6,8,10]。

supper的取值为:当s<upper时,输出s对应t的部分,但这一部分t所对应的s>upper。

这个理解有一些绕,换个说法:当s<upper时,有效的s值应满足s>upper。

紧接着我们对slower做了测试:我们尝试输出比slower还要小的值,判断条件要写s>slower。

运行程序,输出结果为:

supper=
 [-- -- -- 3.0 4.0 5.0]
slower=
 [0.0 2.0 -- -- -- --]

所以, np.ma.masked_where()函数其实是取判断条件的补集,或者说是反面。

【3.2】ax.plot()函数

在官网代码中,最后的输出是按照多个(自变量,因变量)的形式直接写入ax.plot()函数的:

ax.plot(t, smiddle, t, slower, t, supper) #定义画所有图形

因此尝试直接输出【3.1】节中的结果。

首先是单独输出upper、lower和middle,最后直接全部一起输出,为便于对比,给各个图形进行了命名。

此时的完整代码为:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

t = np.arange(0.0, 6.0, 1) #定义自变量
s =  2*t #定义因变量

upper = 6 #定义上标准线
lower = 2 #定义下标准线

supper = np.ma.masked_where(s < upper, t) #输出大于upper的值
slower = np.ma.masked_where(s > lower, s) #输出小于lower的值
smiddle = np.ma.masked_where((s < lower) | (s > upper), s) #输出介于(lower,upper)之间的值

print('supper=\n',supper)
print('slower=\n',slower)
print('smiddle=\n',smiddle)
fig, [ax1,ax2,ax3,ax4] = plt.subplots(1,4)
ax1.plot(t, smiddle) #, t, slower, t, supper
ax1.set_title('smiddle')
ax2.plot(t, slower) #, t, slower, t, supper
ax2.set_title('slower')
ax3.plot(t, supper) #, t, slower, t, supper
ax3.set_title('supper')
ax4.plot(t, supper, t, slower, t, smiddle)
ax4.set_title('all')
plt.show()

输出结果为:

74e39eb71d9d4c62bd6222d9621679c0.png

图2

可见:

当一个坐标轴中有多个图形时,ax.plot()函数函数会自动给图形规划不同的颜色。

【4】总结

学习了曲线分段设置颜色基础教程,探讨了np.ma.masked_where()函数和ax.plot()函数的作用。

 

 

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

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

相关文章

AIDI工业AI视觉检测软件

AIDI工业AI视觉检测软件 AIDI2.4&#xff0c;工业AI视觉检测软件&#xff0c;全模块永久使用最高权限&#xff0c;支持8卡同时运算&#xff0c;提供远程测试

对接阿里asr和Azure asr

1&#xff1a;对接阿里asr 1.1&#xff1a;pom <dependency><groupId>com.alibaba.nls</groupId><artifactId>nls-sdk-recognizer</artifactId><version>2.2.1</version> </dependency>1.2&#xff1a;生成token package c…

同态加密明文矩阵乘密文向量优化:BSGS小步大步法

摘要 本文介绍如何使用小步大步&#xff08;Baby-Step-Giant-Step&#xff0c;BSGS&#xff09;优化RLWE同态加密的明文矩阵和密文向量的乘法。使用 n n n\times n nn明文矩阵的对角打包和BSGS&#xff0c;可以将密文旋转的次数降低为 O ( n ) O(\sqrt{n}) O(n ​). 明文运算…

3、无线通信系统的组成

通常把实现信息传输的系统称为通信系统&#xff0c;下图表示一个通信系统的基本组成。在通信系统中&#xff0c;一般要进行两种变换与反变换。在发送端&#xff0c;第一个变换是输入变换器&#xff0c;它把要传输的信号变为电信号&#xff0c;该信号一般是低频的&#xff0c;而…

数字英文验证码识别 API 对接说明

数字英文验证码识别 API 对接说明 本文将介绍一种 数字英文验证码识别 API 对接说明&#xff0c;它是基于深度学习技术&#xff0c;可用于识别变长英文数字验证码。输入验证码图像的内容&#xff0c;输出验证码结果。 接下来介绍下 数字英文验证码识别 API 的对接说明。 注册…

【d45】【Java】【力扣】206.反转链表

思路 解法1&#xff1a;适用于数字不多的 1.把节点的数&#xff0c;都放进一个arraylist中 2.调用Collections.reverse(list)方法&#xff0c;将list转置 3.再遍历list&#xff0c;逐个放入数字 代码 解法1 import java.util.ArrayList; import java.util.Collections;p…

window批处理脚本:将本地的三个文件通过SCP传输到Linux设备上

文件名send_file.bat&#xff1a; echo off setlocal:: 提示用户输入远程IP地址 set /p remoteIpAddressplease input IP::: 定义本地文件名 set "localFile1111" set "localFile2222" set "localFile3333":: 获取本地文件的完整路径 set "…

【AI视频】Runway:Gen-2 图文生视频与运动模式详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI视频 | Runway 文章目录 &#x1f4af;前言&#x1f4af;仅图片生成视频方法一&#xff1a;通过Midjourney生成图片方法二&#xff1a;通过Runway预览生成图片注意点 &#x1f4af;图加文生成视频方式一&#xff1a;Midjourney…

百度飞浆Paddle OCR检测和识别【OCR数据收集、标注、数据集划分、检测识别模型训练、导出模型】

文章目录 前言一、OCR数据集采集二、OCR数据标注三、划分数据集四、数据训练五、导出模型 前言 1、我的电脑没有GPU&#xff0c;如果不使用AI Studio训练的话&#xff0c;第一遍我是按照CPU进行环境配置和训练的&#xff0c;可以参考这篇文章&#xff0c;我按着弄了一遍&#…

安克创新25届校招CATA北森测评:笔试攻略、真题题库、高分技巧

安克创新自适应能力CATA测评是该公司用于评估候选人认知能力的计算机自适应测评系统。该测评系统由北森题库提供支持&#xff0c;是国内唯一被国际计算机自适应测验协会(IACAT)收录的产品。测评主要评估以下几个维度&#xff1a; 言语能力&#xff1a;测试理解言语信息并基于这…

25届计算机专业毕设选题推荐-基于python+Django协调过滤的新闻推荐系统

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于协调过滤的新闻推荐系统…

浅谈穷举法

穷举法 穷举法是一种通过逐一列举所有可能情况来寻找解决方案的方法。就像找到一把钥匙打开一把锁&#xff0c;我们会尝试每一把钥匙直到找到正确的那一把。比如&#xff0c;如果你忘记了自己的密码&#xff0c;可以尝试每一种可能的组合直到找到正确的密码为止 穷举法的结构 …

【计算机网络 - 基础问题】每日 3 题(十六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

spring boot启动报错:so that it conforms to the canonical names requirements

springboot 2.x的版本中对配置文件中的命名规范有了强制性的要求&#xff0c;如下图所示中的dataSource属性属于驼峰格式&#xff0c;但是在springboot 2.x中不允许使用驼峰形式。 根据错误提示可知将其使用 - 来分割即可 错误信息的含义&#xff1a;“Canonical names should…

51单片机-红外遥控器(NEC标准)

作者&#xff1a;Whappy 时间&#xff1a;2024.9.20 总结一下&#xff01;基础实验到这儿里就圆满结束&#xff0c;历经25天&#xff0c;将51单片机学完并亲自手敲代码近5000行&#xff0c;在手敲代码过程中&#xff0c;明显感觉的看和敲&#xff0c;明显就是不同的感觉&…

基于PHP的CRM管理系统源码/客户关系管理CRM系统源码/php源码/附安装教程

源码简介&#xff1a; 这是一款基于PHP开发的CRM管理系统源码&#xff0c;全称客户关系管理CRM系统源码&#xff0c;它是由php源码开发的&#xff0c;还附带了一整套详细的安装教程哦&#xff01; 功能亮点&#xff1a; 1、公海管理神器&#xff1a;不仅能搞定公海类型&…

阿里开源多模态大模型Ovis1.6,重塑出海电商AI格局

阿里开源Ovis1.6&#xff1a;多模态领域再夺第一 阿里再一次证明了自己在多模态领域的实力。这一次&#xff0c;阿里国际AI团队开源的多模态大模型Ovis1.6&#xff0c;不仅成功开源&#xff0c;还在多模态评测基准OpenCompass上击败了Qwen2VL-7B、InternVL2-26B和MiniCPM-V-2.…

springboot jar包瘦身

现在的项目结构是业务包引用comomn包&#xff0c;common包里又引用了很多其他的jar包&#xff0c;导致业务包打包出来动则就是一百甚至两百兆&#xff0c;现在要做到把公共的包放出来&#xff0c;放到一个单独的文件夹&#xff0c;业务包里只放业务代码。 现在只需要修改maven …

Python 操作 Arduino 入门

本文翻译整理自&#xff1a;Arduino With Python: How to Get Started https://realpython.com/arduino-python/ 文章目录 一、Arduino平台1、Arduino硬件2、Arduino软件 二、“Hello, World!”与Arduino1、上传眨眼示例草图2、连接外部组件3、使用面包板 三、“Hello, World!”…