我正在尝试打印所选代码的图形,因为我正在学习python和matplotlib。我写了下面的代码并且它工作正常,除了打印整个代码列表的图例,我理解为什么它这样做,但我不明白如何让它只打印相关的自动收报机到那个图。 我也觉得,由于我是初学者,我可能写了太多代码,如果有人可以指导我如何减少这些代码,那将有助于我学习正确的方法。
#!/usr/bin/env python3
import numpy as np
import datetime
import pandas as pd
import pandas.io.data
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
import matplotlib as mpl
tickers=["ADBE","AAPL","GME","SNDK"]
roll_pd=30
num_std=2
flist=[]
ts_cutoff_days=-220
flag=1
start=datetime.datetime(2008,7,1)
end=datetime.date.today()
for ticker in tickers:
time_srs=pd.io.data.get_data_yahoo(ticker,start,end)
#time_srs.head()
fname=ticker+"_ohlc.csv"
print (fname)
time_srs.to_csv(fname)
flist.append(fname)
for fn in flist:
#print(fn)
df=pd.read_csv(fn,index_col='Date',parse_dates=True)
df.head()
df.index
close_px=df['Adj Close']
ts=df['Adj Close'][ts_cutoff_days:]
if flag==0:
px_srs=close_px
else:
px_srs=ts
mavg=pd.rolling_mean(px_srs,roll_pd)
mstd=pd.rolling_std(px_srs,roll_pd)
rets=px_srs / px_srs.shift(1) - 1
rets.head()
plt.figure()
plt.plot(px_srs.index, px_srs,color='k',label=tickers)# this is where I am making the error
plt.plot(mavg.index, mavg,label='mavg',color='red')
plt.fill_between(mstd.index,mavg-num_std*mstd,mavg+num_std*mstd,color='b',alpha=0.2)
plt.legend(loc='best')
plt.axes().yaxis.grid(True)
plt.show()
if flag==0:
df1 = pd.io.data.get_data_yahoo(tickers,start, end)['Adj Close']
else:
df1 = pd.io.data.get_data_yahoo(tickers,start, end)['Adj Close'][ts_cutoff_days:]# I tried writing [ts] instead of ['Adj Close'][ts_cutoff_days:], but it gave me an error, so I had to write this above if-else condition to create df1 correctly
答案 0 :(得分:1)
我认为您应该抛弃flist
,因为所有信息都在tickers
中。然后您可以这样做:
...
for ticker in tickers:
df=pd.read_csv(ticker + 'ohlc.csv',index_col='Date',parse_dates=True)
...
plt.plot(px_srs.index, px_srs,color='k',label=ticker)
如果您担心更改文件名,那么您可以为其创建一个简单的函数,并在读取和写入文件时使用它。
另一种可能性是将一个元组放入flist:
for ticker in tickers:
...
flist.append((ticker, fname))
然后在下一个循环中使用此元组:
for ticker, fn in flist:
...
这也使您可以使用ticker
作为情节标签。
答案 1 :(得分:0)