python 彩色曲线图绘制

发布于:2025-02-11 ⋅ 阅读:(30) ⋅ 点赞:(0)

python 彩色曲线图绘制

本文使用的各类软件库版本为:

python 3.12.7

numpy 1.26.4

matplotlib 3.9.2

使用matplotlib库可以非常方便地绘制出各类的数学或统计学图表。一个典型的函数曲线绘制代码如下所示

import numpy as np  
import matplotlib.pyplot as plt


# 生成曲线
omega_n = 1  # 固有频率
omega_d = 2 * np.pi  # 震荡频率
zeta = 0.6  # 阻尼系数
t = np.arange(0, 10, 0.01)  # 时间量
f = 1 - np.exp(-zeta * omega_n * t) / np.sqrt(1 - zeta ** 2) * np.sin(omega_d * t + np.pi / 2)  # 欠阻尼系统阶跃响应

# 显示图片
fig, ax = plt.subplots()  
ax.plot(t, f)  # 选择绘制的数据
ax.set_xlabel("t/s")  # 设置坐标轴标签
ax.set_ylabel("f")  
plt.show()

上面这段代码使用了pyplot子库中的plot()函数,绘制出了如下图所示的二阶系统阶跃响应的函数图像。

类似于二维的热力图,想用颜色来表示函数值的大小。同时,使用彩色曲线可以让图片更加美观。
matplotlib使用colormap来构建色彩映射。
可以使用官方预设的colormap也可以根据自己收集的色卡生成自定义的colormap

但是函数plot()并没有用于设置colormapcmap属性,只有color属性。
因此,无法使用该函数绘制彩色曲线。
collections类提供了一个子类LineCollection,他可以将一系列线段绘制在同一图中。
绘制彩色曲线的核心思想在于,将曲线分成多个线段,并将这个线段根据不同的曲线范围赋予不同的颜色

理论上,我们也可以将曲线分割好后,使用循环的结构利用plot()函数来分段绘制。
显然这样做非常不优雅,而使用LineCollection类就非常方便了。
具体的代码如下:

import numpy as np  
import matplotlib.pyplot as plt  
from matplotlib.collections import LineCollection  


# 生成曲线
omega_n = 1  # 固有频率
omega_d = 2 * np.pi  # 震荡频率
zeta = 0.6  # 阻尼系数
t = np.arange(0, 10, 0.01)  # 时间量
f = 1 - np.exp(-zeta * omega_n * t) / np.sqrt(1 - zeta ** 2) * np.sin(omega_d * t + np.pi / 2)  # 欠阻尼系统阶跃响应

# 线段组拆分
points = np.array([t, f]).T.reshape(-1, 1, 2) # 生成点集  
segments = np.concatenate([points[:-1], points[1:]], axis=1) # 生成线段组

# 显示图片
fig, ax = plt.subplots()  
lc = LineCollection(segments, linewidths=3,cmap='coolwarm') # 设置曲线 
lc.set_array(f)  # 设置函数值映射的颜色
line = ax.add_collection(lc)  # 将曲线组加入图像中
fig.colorbar(line, ax=ax)  # 创建颜色条
ax.set_xlim(min(t) - 0.2, max(t) + 0.2)  # 设置坐标轴范围,
ax.set_ylim(min(f) - 0.2, max(f) + 0.2)  
ax.set_xlabel("t/s")  # 设置坐标轴标签
ax.set_ylabel("f")  
plt.show()

当然,选择使用LineCollection类进行绘图时,pyplot不会自动调整坐标范围,需要使用set_xlim()set_ylim()方法进行设置,上述代码的最终生成的图片如下

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到