Python——Matplotlib作图

本文介绍如何使用Python和matplotlib从.mat文件中读取旋翼机械臂的姿态和位置数据,并将其可视化为易于理解的图表。通过具体代码示例,展示了如何绘制Euler角和位置变化随时间的曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在python中做旋翼机械臂的仿真时,需要查看姿态和位置数据,使用matplotlib作图,虽然很图不是很漂亮到那时都用python实现就很方便。结合操作.mat文件的博客:https://blog.youkuaiyun.com/qq_26879985/article/details/102605094,有如下代码,注释也很清晰。

# -*- coding: utf-8 -*-
"""
@author: Life696
仅供学习、交流使用

"""
# 程序功能,读取.mat文件,作出图像

import matplotlib.pyplot as plt
import numpy as np
import scipy.io as scio

step_time = 0.01 # 每一个数据之间的时间步长

matFile = "./AMS_data.mat"
mat_data = scio.loadmat(matFile)

datalen = len(mat_data["Euler_x_alpha"][0])
# 生成一个列表:起始0,中止int(step_time*datalen)-1,个数datalen,不包括最后一个数
time = np.linspace(0, int(step_time*datalen)-1 , datalen, endpoint = True)

plt.figure()
plt.subplot(3, 2, 1)   # 3行2列,第1个
plt.plot(time, mat_data["Euler_x_alpha"][0], color='red', label='Euler_x_alpha') 
plt.title("Euler_x_alpha")
plt.xlabel("time/s")
plt.ylabel("Angle[degree]")
plt.tight_layout()
plt.legend()

plt.subplot(3, 2, 3)  # 3行2列,第3个(竖着第2个,横着数就是第3个)
plt.plot(time, mat_data["Euler_y_beta"][0], color='red', label='Euler_y_alpha')   
plt.title("Euler_y_beta")
plt.xlabel("time/s")
plt.ylabel("Angle[degree]")
plt.tight_layout() 
plt.legend()

plt.subplot(3, 2, 5)
plt.plot(time, mat_data["Euler_z_gamma"][0], color='red', label='Euler_z_alpha') 
plt.title("Euler_z_gamma")
plt.xlabel("time/s")
plt.ylabel("Angle[degree]")
plt.tight_layout()
plt.legend()

plt.subplot(3, 2, 2)
plt.plot(time, mat_data["position_x"][0]*100, color='red', label='position_x') 
plt.title("position_x")
plt.xlabel("time/s")
plt.ylabel("Position[m]")
plt.tight_layout() 
plt.legend()

plt.subplot(3, 2, 4)
plt.plot(time, mat_data["position_y"][0]*100, color='red', label='position_y')   
plt.title("position_y")
plt.xlabel("time/s")
plt.ylabel("Position[m]")
plt.tight_layout() 
plt.legend()

plt.subplot(3, 2, 6)
plt.plot(time, mat_data["position_z"][0]*100, color='red', label='position_z')  
plt.title("position_z")
plt.xlabel("time/s")
plt.ylabel("Position[m]")
plt.tight_layout() 
plt.legend()

plt.show()

图像如下:

 

 

 

 

### 如何使用 PythonMatplotlib 库绘制多张图表 Matplotlib 是一个强大的 Python 可视化工具,支持多种类型的图表绘制。当需要在同一窗口中展示多个图表时,可以利用 `subplot` 或 `subplots` 方法实现多图布局。 以下是通过 Matplotlib 绘制多张图表的具体方法: #### 1. 使用 `plt.subplot()` 实现多图绘制 `plt.subplot()` 函数允许在一个图形窗口中定义多个子图区域。其参数表示网格布局中的位置,例如 `(rows, cols, index)` 表示第几行、列以及当前子图索引[^3]。 ```python import numpy as np import matplotlib.pyplot as plt # 数据准备 x = np.linspace(0, 10, 100) # 子图1:正弦波 plt.subplot(2, 2, 1) # 定义第一个子图的位置 (2行2列的第一个) plt.plot(x, np.sin(x), 'r-', label='sin(x)') plt.title('Sine Wave') plt.legend() # 子图2:余弦波 plt.subplot(2, 2, 2) # 定义第二个子图的位置 (2行2列的第二个) plt.plot(x, np.cos(x), 'b--', label='cos(x)') plt.title('Cosine Wave') plt.legend() # 子图3:指数函数 plt.subplot(2, 2, 3) # 定义第三个子图的位置 (2行2列的第三个) plt.plot(x, np.exp(-x / 5), 'g-.', label='exp(-x/5)') plt.title('Exponential Decay') plt.legend() # 子图4:多项式曲线 plt.subplot(2, 2, 4) # 定义第四个子图的位置 (2行2列的第四个) plt.plot(x, x ** 2, 'k:', label='x^2') plt.title('Quadratic Function') plt.legend() # 调整子图间距并显示 plt.tight_layout() plt.show() ``` 上述代码展示了如何在同一个窗口中创建四幅不同的子图,并分别绘制正弦波、余弦波、指数衰减和二次方程曲线。 --- #### 2. 使用 `plt.subplots()` 更简洁地管理多图 相比于逐个调用 `plt.subplot()`,`plt.subplots()` 提供了一种更高效的方式一次性生成整个网格结构的对象集合[^4]。 ```python import numpy as np import matplotlib.pyplot as plt # 创建2×2的子图对象 fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 6)) # 数据准备 x = np.linspace(0, 10, 100) # 子图1:正弦波 axes[0, 0].plot(x, np.sin(x), color='red', linestyle='-') axes[0, 0].set_title('Sine Wave') # 子图2:余弦波 axes[0, 1].plot(x, np.cos(x), color='blue', linestyle='--') axes[0, 1].set_title('Cosine Wave') # 子图3:指数函数 axes[1, 0].plot(x, np.exp(-x / 5), color='green', linestyle='-.') axes[1, 0].set_title('Exponential Decay') # 子图4:多项式曲线 axes[1, 1].plot(x, x ** 2, color='black', linestyle=':') axes[1, 1].set_title('Quadratic Function') # 自动调整布局并显示 plt.tight_layout() plt.show() ``` 此方式不仅简化了代码逻辑,还便于统一控制全局样式或共享轴属性。 --- #### 3. 设置独立坐标系下的多图 有时需为每张图表单独配置坐标范围或其他特性,则可通过如下方式进行定制[^5]: ```python import matplotlib.pyplot as plt # 图表一:水平线 ax1 = plt.subplot(1, 2, 1) ax1.axhline(y=2, xmin=0.2, xmax=0.6, color='orange', linewidth=2) ax1.set_xlim([0, 1]) ax1.set_ylim([0, 5]) # 图表二:垂直线 ax2 = plt.subplot(1, 2, 2) ax2.axvline(x=2, ymin=0.2, ymax=0.6, color='purple', linewidth=2) ax2.set_xlim([0, 5]) ax2.set_ylim([0, 1]) # 展示最终效果 plt.tight_layout() plt.show() ``` 这里演示了两个独立坐标的场景——分别为指定区间内的水平线与垂直线条作图。 --- ### 总结 以上介绍了三种基于 Matplotlib 的多图绘制技巧,分别是传统 `plt.subplot()` 方法、现代化 `plt.subplots()` 接口以及针对特定需求设计的自定义坐标体系方案。这些技术能够满足大多数实际项目中的可视化需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值