使用Matplotlib绘制Python错误散点图:索引超出范围

2024-05-28 18:08:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生,我有一个CSV文件,有三列。它们表示传输时间(毫秒)、信号振幅和调频射频(kHz)。有很多线,但它们看起来像这样:

enter image description here

我的任务是找出哪个射频在产生随机噪声,哪个是结构化信号。对于如何做到这一点,我试图首先在我的数据文件的frequency列(第3列)中找到唯一的值,然后分别绘制它们以找到结构化数据。我的猜测是71.231012的频率是白噪声(在文件中它似乎不那么频繁),所以我基本上尝试绘制这两个频率,看看我的猜测是否有点正确。在

到目前为止,这是我的代码:

from __future__ import division
import matplotlib.pyplot as mplot
import numpy as np

file=open("data.csv", "r")
data=file.read()
data=data.replace(" ", ",")
data=data.split("\n")

xscatter=[]
yscatter=[]

for row in data:
    row=row.split(",")
    row[2]=float(row[2])
    if row[2] == 71.231012:
        xscatter.append(row[2])
        yscatter.append(row[1])

mplot.scatter(xscatter, yscatter, color="blue", marker="o")
mplot.show()

但我一直收到这样的错误:

^{pr2}$

我不知道为什么会这样;我想,如果使用拆分,每行将有三个索引(0,1,2)。由于我对Python还很陌生,我也不确定我的代码在做我想做的事情时有多准确或高效,但这只是一个开始。我非常感谢你的帮助。在

编辑:以下是拆分文件后for循环之前的输出示例:

enter image description here


Tags: 文件代码importdata信号as绘制频率
2条回答

代码row=row.split(",")row变量设置为['0.000000', '', '0.000000', '', '0.000000']。您的代码给出了索引错误,因为字符串''中没有索引2。在

有两种方法:

  1. 我的想法是通过将row=row.split(",")更改为row=row.split(",,")来删除数组中那些恼人的空字符串,这将非常有效。

  2. 将您的data=data.replace(" ", ",")更改为data=data.replace(" ", ",")(两个空白),这样也可以完美地工作。

如果你有一个像下面这样的输入csv文件

0,1.62435,7.61417
0,-0.611756,7.61417
0,-0.528172,71.231
0,-1.07297,71.231
0,0.865408,7.61417
0,-2.30154,7.61417
0,1.74481,7.61417
0,-0.761207,7.61417
0,0.319039,71.231
0,-0.24937,71.231
1,1.46211,71.231
1,-2.06014,7.61417
1,-0.322417,71.231
1,-0.384054,7.61417
1,1.13377,7.61417
1,-1.09989,71.231
1,-0.172428,71.231
1,-0.877858,7.61417
1,0.0422137,71.231
1,0.582815,71.231

您可以使用numpy.loadtxt来读取它,并通过在最后一列中的各个唯一频率上循环来绘制以频率值分隔的图。在

^{pr2}$

相关问题 更多 >

    热门问题