使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南
创作时间:
作者:
@小白创作中心
使用 NumPy 和 Matplotlib 进行高级数据可视化:实践指南
引用
CSDN
1.
https://blog.csdn.net/weixin_37647148/article/details/143138810
在数据科学和工程实践中,NumPy和Matplotlib是两个非常重要的Python库。NumPy提供了强大的数值计算能力,而Matplotlib则是一个功能丰富的数据可视化工具。本文将详细介绍如何使用这两个库进行高级数据可视化,包括多曲线叠加、动态图表、双Y轴图表、热力图和3D可视化等实用场景。
环境准备
确保你已经安装NumPy和Matplotlib:
pip install numpy matplotlib
引入必要库:
import numpy as np
import matplotlib.pyplot as plt
NumPy 高级数据生成
以下示例生成多组数据,以便展示复杂的图表绘制。
# 创建时间序列数据
time = np.linspace(0, 20, 200)
# 多种波形生成
sin_wave = np.sin(time)
cos_wave = np.cos(time)
sin2_wave = np.sin(time + np.pi / 4) # 相位偏移的正弦波
noise = 0.3 * np.random.randn(200) # 添加噪声
# 混合信号数据
mixed_signal = sin_wave + noise
这些数据将用于展示多种可视化技术。
叠加多条曲线
在工程和科研中,经常需要将多条曲线叠加在一起进行比较。
plt.figure(figsize=(10, 6))
# 绘制多条曲线
plt.plot(time, sin_wave, label='Sine Wave', linestyle='-', color='b')
plt.plot(time, cos_wave, label='Cosine Wave', linestyle='--', color='r')
plt.plot(time, sin2_wave, label='Phase Shifted Sine', linestyle='-.', color='g')
# 添加图例、标题和坐标轴标签
plt.title('Multiple Waveforms')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend(loc='upper right')
# 展示图表
plt.show()
这个图表将正弦、余弦以及相位偏移的正弦波叠加在一起,帮助分析它们的相位和幅度关系。
动态变化的折线图
有时我们需要动态观察数据的变化,下面的示例展示了如何用FuncAnimation实现动态折线图。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 生成数据:时间序列和正弦波
time = np.linspace(0, 20, 200)
sin_wave = np.sin(time)
# 创建图表和轴
fig, ax = plt.subplots()
ax.set_xlim(0, 20) # X轴范围
ax.set_ylim(-1.5, 1.5) # Y轴范围
line, = ax.plot([], [], lw=2, color='b') # 初始空折线
# 初始化函数:将折线置为空白
def init():
line.set_data([], [])
return line,
# 动态更新函数:逐帧更新折线的数据
def update(frame):
x = time[:frame] # 每帧展示一部分时间序列数据
y = sin_wave[:frame] # 每帧展示对应的正弦波数据
line.set_data(x, y)
return line,
# 创建动画,frames 控制动画的总帧数,interval 设置每帧间隔时间(毫秒)
ani = FuncAnimation(fig, update, frames=len(time), init_func=init, blit=True, interval=50)
# 展示动画
plt.show()
该动画演示了正弦波随着时间的动态绘制过程。
双 Y 轴图表
在某些场景下,我们需要在同一个图表上显示两种不同量纲的数据。
fig, ax1 = plt.subplots()
# 绘制第一个 Y 轴上的数据
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('Sine Wave', color='b')
ax1.plot(time, sin_wave, color='b')
ax1.tick_params(axis='y', labelcolor='b')
# 创建共享 X 轴的第二个 Y 轴
ax2 = ax1.twinx()
ax2.set_ylabel('Mixed Signal', color='r')
ax2.plot(time, mixed_signal, color='r')
ax2.tick_params(axis='y', labelcolor='r')
# 展示图表
fig.tight_layout()
plt.show()
这幅图展示了正弦波和混合信号,分别对应于左右两个 Y 轴,使得不同数据量的趋势更直观。
热力图(Heatmap)
热力图可以有效地展示二维数据的密集分布。
# 生成二维随机数据
data = np.random.rand(10, 10)
# 绘制热力图
plt.imshow(data, cmap='viridis', interpolation='nearest')
plt.colorbar() # 添加颜色条
plt.title('Heatmap Example')
plt.show()
热力图可以用于分析二维数据的密集度,如矩阵值或图像处理中的像素值。
3D 数据可视化
Matplotlib 还支持 3D 可视化,这对于科学计算和复杂数据展示非常有用。
from mpl_toolkits.mplot3d import Axes3D
# 创建网格数据
X = np.linspace(-5, 5, 50)
Y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(X, Y)
Z = np.sin(np.sqrt(X**2 + Y**2))
# 创建 3D 图表
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制 3D 曲面
ax.plot_surface(X, Y, Z, cmap='viridis')

# 添加标题
ax.set_title('3D Surface Plot')
plt.show()
3D 曲面图展示了二维函数的空间分布,可用于展示地形数据、数学函数等。
结论
本文介绍了使用NumPy和Matplotlib进行更复杂的数据可视化方法,包括多曲线叠加、动态折线图、双 Y 轴图表、热力图和 3D 可视化。这些技巧可以帮助你更全面地展示数据,并揭示数据背后的复杂关系。
希望这篇博客能帮助你更好地掌握 NumPy 和 Matplotlib 的高级用法!
热门推荐
兼职解除劳动合同有赔偿金吗
辞退相关法律问题全解析:兼职、试用期、犯错被辞退的权益保障
如何分析混合基金的投资策略?这些分析方法有哪些实际应用?
大血藤泡水的功效与作用、禁忌和食用方法
一周内全球航天发射多次失败,专家:航天仍是高风险、高技术
每个词牌名,都有一个专属的故事
人力系统的投资回报率(ROI)如何计算?
第一批读人工智能专业的学生,抓住风口了么?
《伤寒论》千古第一方——桂枝汤:临床应用体悟总结 | 思维导图版
修复面膜可以天天用吗?修护面膜多久敷一次比较好?
煎中药前,药材到底能不能清洗?专家释疑
八字命理学:遇到贵人的六大星曜特征
统招专升本 vs 自考专升本:优缺点全面对比
VBA合并Excel多工作表数据到一表的快速方法
中国合同印花税税率详解与实务操作指南
裁员劳动仲裁需要什么资料?不同意调岗怎么办?
探索BIM技术的未来:如何提升建筑项目效率与协作
请假后一定要销假吗?
太赫兹通信的应用与潜力
预计“十四五”末,山东GDP将突破10万亿元大关
提升停车场通行速度:高效出入口管理解决方案
如何减少开关电源纹波
2025年机动车年检材料清单与避坑指南:个人/单位全解析
前庭性眩晕可以根治吗
申请年休假的期限
考研没“上岸”很崩溃,如何走出情绪漩涡
备孕期间喝咖啡的影响及安全性研究
海南的主要景点60岁免门票吗?优惠政策及原因
开工前一天就失眠?“节后综合征”治愈指南,请查收
为什么冬天吃点“凉”更养生?这样搭配食物清热润燥