使用Matplotlib绘制指定GW数据集波形图求助(3440行数据)
修正代码以匹配引力波波形目标图
原代码存在的问题
- 数据读取逻辑错误:原代码把空格分隔的两列数据读成单列后拆分,正确方式是直接通过
read_csv指定分隔符 - 拼写错误:
df.coulumns应为df.columns - 未转换数据类型:拆分后的字符串需转为浮点型(时间和应变均为小数,不是整数)
- 绘图类型不符:目标图是连续折线,应使用
plt.plot()而非散点图plt.scatter() - 数据范围选取错误:前200行对应时间区间与目标图不符,应聚焦到目标图的核心时间范围(约-0.02s到0.01s)
修正后的代码
import pandas as pd import matplotlib.pyplot as plt # 直接读取空格分隔的数据集,指定列名 df = pd.read_csv('https://www.gw-openscience.org/GW150914data/P150914/fig2-unfiltered-waveform-H.txt', sep='\s+', names=['time (s)', 'strain (h1)']) # 确保数据为浮点型(显式转换避免类型问题) df['time (s)'] = df['time (s)'].astype(float) df['strain (h1)'] = df['strain (h1)'].astype(float) # 过滤出目标图对应的时间区间 mask = (df['time (s)'] >= -0.02) & (df['time (s)'] <= 0.01) filtered_df = df[mask] # 绘制匹配目标图的折线图 plt.figure(figsize=(14, 8)) plt.plot(filtered_df['time (s)'], filtered_df['strain (h1)'], color='blue', linewidth=0.8) plt.xlabel('Time (s)') plt.ylabel('Strain (h1)') plt.title('GW150914 Unfiltered Waveform (H1)') plt.grid(True, alpha=0.3) plt.show()
代码说明
- 使用
sep='\s+'匹配任意数量的空格分隔符,直接读取两列数据,无需后续拆分操作 - 显式转换数据类型,确保数值运算和绘图逻辑正常
- 通过时间范围过滤,聚焦到目标图展示的波形核心区间
- 用
plt.plot()绘制连续折线,完全匹配目标图的样式 - 添加坐标轴标签、标题和网格,让图表呈现效果更贴近目标图
内容的提问来源于stack exchange,提问作者ThinhNam
相关产品推荐
相关产品推荐

