You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Matplotlib绘制CSV数据对应的未知类型图表?

Matplotlib实现目标图表的方案说明

你要绘制的是带时域波形预览的交叉谱密度(CSD)组合图,和你查阅的Matplotlib官方CSD示例属于同类型图表,只是额外增加了顶部的原始输入信号时域展示子图。

实现步骤

  • 先读取你的CSV数据,默认CSV包含时间、信号1、信号2三列,用pandas.read_csv()接口读取即可,若你的数据列结构不同,调整对应列的引用逻辑即可。
  • 调用plt.subplots()创建2行1列的组合子图,可设置上下子图共享x轴,保证时域和频域的坐标对应关系。
  • 顶部子图分别绘制两个输入信号的时域曲线,用不同颜色区分,添加图例、y轴标签说明信号含义。
  • 底部子图直接调用matplotlib.pyplot.csd()接口计算并绘制交叉谱密度曲线,该接口支持自定义采样频率、FFT窗函数、重叠长度等参数,可根据你的数据属性调整。
  • 调整子图间距,添加整体标题后可直接展示或导出图片。

示例代码

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 1. 读取CSV数据,替换为你的实际文件路径
df = pd.read_csv("你的数据文件路径.csv")
t = df.iloc[:, 0].values  # 第一列为时间列
x1 = df.iloc[:, 1].values # 第二列为第一个信号列
x2 = df.iloc[:, 2].values # 第三列为第二个信号列
# 计算采样频率,可根据你的实际采样参数直接赋值
fs = 1 / np.mean(np.diff(t))

# 2. 创建组合子图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 7))

# 3. 绘制顶部时域信号
ax1.plot(t, x1, label="信号1", color="#1f77b4")
ax1.plot(t, x2, label="信号2", color="#ff7f0e")
ax1.set_ylabel("信号幅值")
ax1.legend()
ax1.grid(alpha=0.3)

# 4. 绘制底部CSD曲线
cxy, freq = ax2.csd(x1, x2, Fs=fs, NFFT=1024, color="#2ca02c")
ax2.set_ylabel("交叉谱密度 (dB/Hz)")
ax2.set_xlabel("频率 (Hz)")
ax2.grid(alpha=0.3)

# 调整布局
plt.tight_layout()
plt.show()

如果需要同时展示CSD的相位信息,可额外增加一个子图,通过np.angle(cxy)计算相位后绘制即可。

内容的提问来源于stack exchange,提问作者zaydoosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:24:02