这是我第一次在这里提问。我是一个非常新的编程而且不是很有天赋,我正在研究一个小小的程序,我试图将日元的EURUSD价格绘制出来,我遇到了无法在x轴上绘制日期的问题。我一直在网上寻求帮助和答案,但没有任何好运。无论如何,到目前为止,我的代码是:
j=1
dates = []
price = []
with open('EURUSD_day.csv', 'r') as f:
reader = csv.reader(f)
print (f)
for row in reader:
if j > 1:
dates.append(row[1])
dates.append(float(row[6]))
j = j + 1
import datetime as dt
dates = []
x = [dt.datetime.strptime(d, '%m/%d/%Y').date() for d in dates]
y = range(len(x))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
plt.plot
plt.gcf().autofmt_xdate
plt.show()
我感谢你的帮助!
答案 0 :(得分:0)
我不被允许评论,因为在这个stackexchange上我还没有50个声望。但是,这应该是一个评论,而不是一个答案,因为它并没有真正回答你的问题。
您的代码存在很多问题。首先,您确实需要绘制数据:
你的plt.plot行应该是这样的:
plt.plot(x, y)
我不完全确定这会有效,因为我认为pyplot需要x和y轴的数字,而x的列表当前是字符串。这也意味着更改x轴的格式应该存在问题,因为DateFormatter期望的是datetime对象,而不是字符串。
这忽略了以下语法错误:
for row in reader:
if j > 1:
dates.append(row[1])
dates.append(float(row[6]))
这不是有效的python代码。大概你的意思是以下几点?
for row in reader:
if j > 1:
dates.append(row[1])
dates.append(float(row[6]))
在任何情况下,为什么不从文件中读取它们时将它们转换为datetime.date?
答案 1 :(得分:0)
您的代码中存在一些问题。实际上不仅仅是一对夫妇。首先你声明dates=[]
并填写你从文件中读取的日期,你也做得很奇怪!
您将日期填入列表中,如下所示:
[" String element",float," String element",float ....]
然后你忘记了所有这一切,因为你在dates=[]
语句之后再次声明一个新的空列表import
,然后你用生成器通过那个空列表
[dt.datetime.strptime(d, '%m/%d/%Y').date() for d in dates]
创建空的日期时间对象。最后你实际上从未调用过绘图函数,因为
>>> plt.plot
<function plot at 0x04607C48>
你永远不会发送任何实际数据。你的情节缺乏任何论据:plt.plot([1,2,3,4])
。最后再次重复相同的错误,因为
>>> plt.gcf().autofmt_xdate
<bound method Figure.autofmt_xdate of <matplotlib.figure.Figure object at 0x02F97FB0>>
你再也不会调用自动编码日期plt.gcf().autofmt_xdate
的实际方法。
请确认您确实拥有继续执行计划下一步所需的一切。 这意味着:
striptime
解析日期,那么您的日期列表的格式为%m/%d/%Y
:[01/1/2012, 01/2/2012...]
striptime
解析日期之后,您有一个datetime.datetime对象列表! (一个有意义的对象列表)同样要绘制它们,使用plt.plot_dates
函数来处理大部分漂亮的日期格式。
我强烈建议您从IDLE入手,开始定义小而简短的功能,并逐步完成溶剂的工作。希望它有任何帮助。