【问题标题】:How can you plot data from a .txt file using matplotlib?如何使用 matplotlib 从 .txt 文件中绘制数据?
【发布时间】:2020-03-15 20:14:50
【问题描述】:

我想使用 matplotlib 绘制一个 txt 文件,但我不断收到此错误消息。我对 python 不是很熟悉,因为我是几周前开始学习的。文本文件的格式如下(2048 行):

6876.593750  1
6876.302246  1
6876.003418  0

我想绘制 txt 中的数据。文件。
错误信息是[IndexError: list index out of range]

我使用的代码是:

import numpy as np
import matplotlib.pyplot as plt

with open("Alpha_Particle.txt") as f:
data = f.read()

data = data.split('\n')

x = [row.split(' ')[0] for row in data]
y = [row.split(' ')[1] for row in data]

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_title("Plot title")    
ax1.set_xlabel('x label')
ax1.set_ylabel('y label')

ax1.plot(x,y, c='r', label='the data')

leg = ax1.legend()

plt.show()

提前感谢您!

【问题讨论】:

  • 乍一看,.txt 文件中的 x 数据点和 y 数据点之间似乎有两个空格。您在列表理解中将其沿单个空格拆分,这将返回一个包含 x 点、一个空格和一个 y 点的列表。
  • 数据有四行,而不是三行

标签: python matplotlib


【解决方案1】:

你只是读错了数据。这是一种更清洁的方法:

with open('Alpha_Particle.txt') as f:
    lines = f.readlines()
    x = [line.split()[0] for line in lines]
    y = [line.split()[1] for line in lines]

x
['6876.593750', '6876.302246', '6876.003418']

y
['1', '1', '0']

【讨论】:

    【解决方案2】:

    也许你可以使用 pandas 或 numpy

    import pandas as pd
    data = pd.read_csv('data.txt',sep='\s+',header=None)
    data = pd.DataFrame(data)
    
    import matplotlib.pyplot as plt
    x = data[0]
    y = data[1]
    plt.plot(x, y,'r--')
    plt.show()
    

    这是我的数据

    1   93
    30  96
    60  84
    90  84
    120 48
    150 38
    180 51
    210 57
    240 40
    270 45
    300 50
    330 75
    360 80
    390 60
    420 72
    450 67
    480 71
    510 7
    540 74
    570 63
    600 69
    

    The output looked like this

    使用Numpy,你也可以用下面的方法试试

    import numpy  as np
    import matplotlib.pyplot as plt
    data = np.loadtxt('data.txt')
    
    
    x = data[:, 0]
    y = data[:, 1]
    plt.plot(x, y,'r--')
    plt.show()
    

    【讨论】:

      【解决方案3】:

      Chris Arena 的回答很简洁。请记住,您正在将 str 保存到列表中。如果您想使用 matplotlib 绘制 x 和 y,我建议将格式从 'str' 更改为 'int' 或 'float':

      import matplotlib.pyplot as plt
      with open('filename.txt', 'r') as f:
          lines = f.readlines()
          x = [float(line.split()[0]) for line in lines]
          y = [float(line.split()[1]) for line in lines]
      plt.plot(x ,y)
      plt.show()
      

      【讨论】:

        【解决方案4】:

        一个快速的解决方案是删除数据中的第 4 个元素,如下所示:

        data.pop()
        

        放在后面

        data = data.split('\n')
        

        【讨论】:

          猜你喜欢
          • 2012-11-12
          • 1970-01-01
          • 2015-01-31
          • 1970-01-01
          • 1970-01-01
          • 2022-07-08
          • 2022-01-27
          • 1970-01-01
          相关资源
          最近更新 更多