使用来自txt文件(Python)的数据绘制日期和时间(x轴)与值(y轴)(仅由空格分隔的列)

时间:2016-05-17 04:04:40

标签: python matplotlib

我需要绘制日期和时间(x轴)与文本文件中的值(y轴)。我在这个网站上发现了一个代码,它代表了我需要的代码, 但问题是它读取了一个文本文件,其中第三列用逗号分隔。 在可能的情况下,我只有空间,而且我不知道如何将第三列与前一个

分开

代码是这样的:

from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
x = []
y = []
t = []
fig = plt.figure()

readFile = open('1.txt', 'r')
sepFile = readFile.read().split('\n')
readFile.close()
for idx, plotPair in enumerate(sepFile):
    if plotPair in '. ':

        continue
    if idx > 1:  
        xAndY = plotPair.split(',')
        time_string = xAndY[0]
        time_string1 = datetime.strptime(time_string, '%d/%m/%Y %H:%M')
        t.append(time_string1)
        y.append(float(xAndY[1]))
ax1 = fig.add_subplot(1, 1, 1, axisbg='white')
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%Y %H:%M'))
ax1.plot(t, y, 'r-', linewidth=3.3)
plt.title('Subordinate prediction')
plt.xlabel('DATA/TIME')
plt.ylabel('Height (Meters relative to MLLW)')
fig.autofmt_xdate(rotation=45)
fig.tight_layout()
fig.show()

我的文本文件是:

01/12/2014  4:36    1.6
01/12/2014  10:20   0.45
01/12/2014  16:50   2
01/12/2014  23:28   0.21
02/12/2014  5:52    1.54
02/12/2014  11:11   0.48
02/12/2014  17:40   2.14
03/12/2014  0:28    0.04
03/12/2014  6:54    1.51
03/12/2014  11:58   0.48
03/12/2014  18:26   2.25
04/12/2014  1:20    -0.09
04/12/2014  7:46    1.48
04/12/2014  12:43   0.46
04/12/2014  19:09   2.32
05/12/2014  2:08    -0.17
05/12/2014  8:32    1.44
05/12/2014  13:27   0.44

它不起作用,请有人帮助我吗?

1 个答案:

答案 0 :(得分:0)

我想说最可能的方法是:

    ...
    xAndY = plotPair.split('\t')
    time_string = xAndY[0]+" "+xAndY[1]
    time_string1 = datetime.strptime(time_string, '%d/%m/%Y %H:%M')
    t.append(time_string1)
    y.append(float(xAndY[2]))
    ...

这将通过文件中的明显制表符(按发布内容)进行拆分,然后从包含3个值的结果数组中获取前两个部分,并将它们组合为日期时间,最后一部分是y值

编辑:

你忘记了缩进。我给你的所有代码应该在if语句下对齐,如下所示:

     if idx > 1:  
        xAndY = plotPair.split('\t')
        time_string = xAndY[0]+" "+xAndY[1]
        time_string1 = datetime.strptime(time_string, '%d/%m/%Y %H:%M')
        t.append(time_string1)
        y.append(float(xAndY[2]))

不要忘记在python中,空白区很重要。