[英]Python Plotting a graph by taking an input from a .txt file with 1 x axis and 3 y axis?
[英]Plotting simple graph python, from txt file
我试图剥离并获取.txt文件中的数据,以允许我绘制一个简单的图形,但我似乎无法将数据转换为我想要的格式。 有人能引导我朝正确的方向发展吗?
下面是文本文件中数据的简短示例,在python中我尝试.read()文本文件,然后绘制一个简单的图形,如果可能的话,使用文本文件中的标题。
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代码:(这不是完美的代码,因为我仍在整理它!)
import numpy as np
import matplotlib.pyplot as plt
with open("EURGBP DATA.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]
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()
该DataFrame
中物体pandas
已经有一个函数plot()
这是非常有帮助的。 将您的示例复制到剪贴板我可以执行以下操作:
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')
这些行在空格上分割数据行,而不是逗号:
x = [row.split()[0] for row in data]
y = [row.split()[1] for row in data]
您需要指定要拆分的字符(空白字符是默认值):
x = [row.split(',')[0] for row in data]
y = [row.split(',')[1] for row in data]
编辑:额外的数据清理
如果数据文件有一个尾随换行符
y = [row.split(',')[1] for row in data]
将引发IndexError
,因为尾部换IndexError
不会有第二个元素:
>>> data = 'a,b\nc,d\n'.split('\n')
>>> print(data)
['a,b', 'c,d', '']
>>> print(data[0].split(','))
['a', 'b']
>>> print(data[-1].split(','))
['']
通过在拆分值之前测试该行不是空字符串来防御此问题:
x = [row.split(',')[0] for row in data if row]
y = [row.split(',')[1] for row in data if row]
您还需要从传递给matplotlib的值中删除列标题名称。 通过在创建x和y值时省略第一行来执行此操作:
>>> data = 'First,Second\na,b\nc,d\n'.split('\n')
>>> 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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.