最初に、Python 用の ggplot は素晴らしいものの始まりであり、開発者が作業を行ったことを称賛します。現在、同じプロットで 2 つの大きな問題があります。8株以下をプロットすると、凡例が図の領域からはみ出すことを除いて、画像はきれいに見えます(問題1)。8 つ以上の株をプロットすると、明らかにデータを表していない不規則な線がプロットに表示されます。さらに、凡例のサイズは変更されず、代わりに追加の株式ティッカーが除外されます (問題 2)。どんな助けでも大歓迎です。ありがとう!
適切なプロット コード:
import datetime
from ggplot import *
import pandas.io.data as web
import pandas as pd
import numpy as np
start = datetime.datetime(2014,1,1)
end = datetime.datetime(2014, 3,19)
stocks = ['APO','AVG','FI','ANIK','CELG','PACW','CBOE','BIIB']
stockData = {}
for ticker in stocks:
stockData[ticker] = web.get_data_yahoo(ticker, start, end)
price = pd.DataFrame({tic: data['Adj Close'] for tic, data in stockData.iteritems()})
returns = price.pct_change()
returns = returns.apply(cumsum)
rt = returns.index
returns['Date'] = rt
# plotting the cum performance for each security
ret = pd.melt(returns, id_vars='Date')
plot = ggplot(aes(x='Date', y='value', color='variable'),data=ret) +geom_line()
# plotting the equity curve of the theoretical portfolio
zt = returns
del zt['Date']
zt = zt.apply(np.sum, axis=1)
z = pd.DataFrame(zt, index=zt.index)
z['Date'] = rt
z.columns = ['equity curve', 'Date']
ret2 = pd.melt(z, id_vars='Date')
plot2 = ggplot(aes(x='Date', y='value'),data=ret2) +geom_line()
print plot
print plot2
悪いプロット コード:
import datetime
from ggplot import *
import pandas.io.data as web
import pandas as pd
import numpy as np
start = datetime.datetime(2014,1,1)
end = datetime.datetime(2014, 3,19)
stocks = ['APO','AVG','FI','ANIK','CELG','PACW','CBOE','BIIB','ISIS', 'SDRL'] # <-- notice two additional tickers
stockData = {}
for ticker in stocks:
stockData[ticker] = web.get_data_yahoo(ticker, start, end)
price = pd.DataFrame({tic: data['Adj Close'] for tic, data in stockData.iteritems()})
returns = price.pct_change()
returns = returns.apply(cumsum)
rt = returns.index
returns['Date'] = rt
# plotting the cum performance for each security
ret = pd.melt(returns, id_vars='Date')
plot = ggplot(aes(x='Date', y='value', color='variable'),data=ret) +geom_line()
# plotting the equity curve of the theoretical portfolio
zt = returns
del zt['Date']
zt = zt.apply(np.sum, axis=1)
z = pd.DataFrame(zt, index=zt.index)
z['Date'] = rt
z.columns = ['equity curve', 'Date']
ret2 = pd.melt(z, id_vars='Date')
plot2 = ggplot(aes(x='Date', y='value'),data=ret2) +geom_line()
print plot
print plot2