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

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

前期已经学习了大量的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.kler.cn/a/312981.html

相关文章:

  • 在C++上实现反射用法
  • 985研一学习日记 - 2024.11.12
  • 【PGCCC】Postgresql Toast 原理
  • leetcode206. Reverse Linked List
  • 「QT」几何数据类 之 QLine 整型直线类
  • Linux入门:环境变量与进程地址空间
  • 什么是3D展厅?有何优势?怎么制作3D展厅?
  • 蓝星多面体foc旋钮键盘复刻问题详解
  • JVM java主流的追踪式垃圾收集器
  • docker 镜像,导入导出,
  • 【数据结构入门】排序算法之三路划分与非比较排序
  • 基于OpenCV的YOLOv5图片检测
  • 寄存器二分频电路
  • Serverless架构
  • 【C/C++语言系列】实现单例模式
  • golang学习笔记23——golang微服务中服务间通信问题探讨
  • 【ShuQiHere】 探索 IEEE 754 浮点数标准:以 57.625 和 -57.625 为例
  • 【bugfix】-洽谈回填的图片消息无法显示
  • 0基础学习HTML(八)头部
  • PyCharm部分快捷键冲突问题
  • Pybullet 安装过程
  • 利士策分享,周末时光:一场自我充实的精致规划
  • python学习-10【模块】
  • C#开源的一个能利用Windows通知栏背单词的软件
  • 【修改Linux登录时欢迎信息】
  • 基于SpringBoot+Vue的宠物医院管理系统