Plotting simple graph python, from txt file
我试图剥离并获取.txt文件中的数据,以使我能够绘制简单的图形,但是我似乎无法将数据转换成我想要的格式。有人可以指引我正确的方向吗?
下面是文本文件中数据的简短示例,在python中,我试图对文本文件进行.read(),然后绘制一个简单的图形,并在可能的情况下使用文本文件中的标题。 >
1 2 3 4 5 6 7 8 9 10 11 12 | Date,Value 2016-03-31,0.7927 2016-03-30,0.7859 2016-03-29,0.7843 2016-03-24,0.7893 2016-03-23,0.792 2016-03-22,0.7897 2016-03-21,0.7818 2016-03-18,0.778 2016-03-17,0.781 2016-03-16,0.7855 2016-03-15,0.7845 |
到目前为止我尝试过的我的python代码:(这不是完美的代码,因为我仍在对其进行排序!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import numpy as np import matplotlib.pyplot as plt with open("EURGBP DATA.txt") as f: data = f.read() data = data.split('\ ') x = [row.split()[0] for row in data] y = [row.split()[1] for row in data] index = [i for i,val in enumerate(x)] fig = plt.figure() ax1 = fig.add_subplot(111) ax1.set_title("Plot DAta") ax1.set_xlabel('x') ax1.set_ylabel('y') ax1.set_xticklabels(x) ax1.plot(index ,y, c='r', label='the data') leg = ax1.legend() plt.locator_params(nbins=len(index)-1) plt.show() |
对于大pandas(我在下面使用
1 | pd.read_table('datafile.txt', parse_dates = True, index_col = 0, sep = ',').plot() |
其中
1 2 3 4 5 6 7 8 | import pandas as pd import matplotlib.pyplot as plt df = pd.read_clipboard(delimiter=',') df.plot() ax = plt.gca() ax.set_xticklabels(df.Date) plt.savefig(filename='test.png') |
这些行将数据行分隔为空格而不是逗号:
1 2 | x = [row.split()[0] for row in data] y = [row.split()[1] for row in data] |
您需要指定要分割的字符(空白字符是默认字符):
1 2 | x = [row.split(',')[0] for row in data] y = [row.split(',')[1] for row in data] |
编辑:附加数据清理
如果数据文件末尾有换行符,则
1 | y = [row.split(',')[1] for row in data] |
将引发
1 2 3 4 5 6 7 8 9 10 | >>> data = 'a,b\ c,d\ '.split('\ ') >>> print(data) ['a,b', 'c,d', ''] >>> print(data[0].split(',')) ['a', 'b'] >>> print(data[-1].split(',')) [''] |
通过在拆分值之前测试行不是空字符串来防御此问题:
1 2 | x = [row.split(',')[0] for row in data if row] y = [row.split(',')[1] for row in data if row] |
您还需要从传递给matplotlib的值中删除列标题名称。通过在创建x和y值时省略第一行来做到这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> data = 'First,Second\ a,b\ c,d\ '.split('\ ') >>> print(data) ['First,Second', 'a,b', 'c,d', ''] >>> x = [row.split(',')[0] for row in data[1:] if row] >>> print(x) ['a', 'c'] >>> y = [row.split(',')[1] for row in data[1:] if row] >>> print(y) ['b', 'd'] |