線グラフを作り、特定期間だけを色付けしたいです。1日だけなら、画像のように
「plt.axvline(x = '2021-04-14', color = 'red', ls = 'dotted')」を使っていれられました。
色付けの期間を2021-04-14~2021-05-14としたい場合はどのようにしたらいいですか?
また、特定期間を青にしたい場合や網掛けなどにデザインを変えたい場合はどうしたら、いいですか?
python
1コード 2#BM(QQQ,SPY)をグラフにいれて比較 3#①5銘柄で効率的フロンティアを抽出 4#②QQQとSPYの保有率は「0」とした 5#③QQQとSPYの数字も取得するが、効率的フロンティアの計算式には加えない 6#④効率的フロンティアとSPY,QQQのみを表示させる 7 8#%matplotlib inline 9 10import numpy as np 11import pandas_datareader.data as web 12import pandas as pd 13import matplotlib.pyplot as plt 14import scipy.stats as ss 15from matplotlib.animation import FuncAnimation 16import japanize_matplotlib 17import pandas_datareader.data as web #データのダウンロードライブラリ 18 19AAPL=web.DataReader("AAPL", "yahoo","2017/1/1")['Adj Close'] 20MSFT=web.DataReader("MSFT", "yahoo","2017/1/1")['Adj Close'] 21AMZN=web.DataReader("AMZN", "yahoo","2017/1/1")['Adj Close'] 22GOOG=web.DataReader("GOOG", "yahoo","2017/1/1")['Adj Close'] 23PSQ=web.DataReader("PSQ", "yahoo","2017/1/1")['Adj Close'] 24QQQ=web.DataReader("QQQ", "yahoo","2017/1/1")['Adj Close'] 25SPY=web.DataReader("SPY", "yahoo","2017/1/1")['Adj Close'] 26 27AAPL=AAPL/AAPL.iloc[0]#株価の指数化 28 29lnAAPL=np.log(AAPL) 30dlnAAPL=lnAAPL.diff().dropna() 31 32MSFT=MSFT/MSFT.iloc[0] 33MSFT 34lnMSFT=np.log(MSFT) 35dlnMSFT=lnMSFT.diff().dropna() 36 37AMZN=AMZN/AMZN.iloc[0] 38AMZN 39lnAMZN=np.log(AMZN) 40dlnAMZN=lnAMZN.diff().dropna() 41 42 43GOOG=GOOG/GOOG.iloc[0] 44GOOG 45lnGOOG=np.log(GOOG) 46dlnGOOG=lnGOOG.diff().dropna() 47 48 49PSQ=PSQ/PSQ.iloc[0] 50PSQ 51lnPSQ=np.log(PSQ) 52dlnPSQ=lnPSQ.diff().dropna() 53 54QQQ=QQQ/QQQ.iloc[0] 55QQQ 56lnQQQ=np.log(QQQ) 57dlnQQQ=lnQQQ.diff().dropna() 58 59SPY=SPY/SPY.iloc[0] 60SPY 61lnSPY=np.log(SPY) 62dlnSPY=lnSPY.diff().dropna() 63 64def portfolio_rebalance(tsd1,tsd2,tsd3,tsd4,tsd5,tsd6,tsd7): 65 port=pd.concat([tsd1,tsd2,tsd3,tsd4,tsd5,tsd6,tsd7],axis=1).dropna() 66 port.columns=('p1','p2','p3','p4','p5','p6','p7') 67 port['a1']=0 68 port['a2']=0 69 port['a3']=0 70 port['a4']=0 71 port['a5']=0 72 port['a6']=0 73 port['a7']=0 74 port['v']=1 75 76 n=len(port) 77 78 p1=port['p1'].iloc[0] 79 p2=port['p2'].iloc[0] 80 p3=port['p3'].iloc[0] 81 p4=port['p4'].iloc[0] 82 p5=port['p5'].iloc[0] 83 p6=port['p6'].iloc[0] 84 p7=port['p7'].iloc[0] 85 v=port['v'].iloc[0] 86 87 a1=float(v*0.126/p1) 88 a2=float(v*0.172/p2) 89 a3=float(v*0.068/p3) 90 a4=float(v*0.107/p4) 91 a5=float(v*0.527/p5) 92 a6=float(v*0/p6) 93 a7=float(v*0/p7) 94 95 port.iloc[0,3]=a1 96 port.iloc[0,4]=a2 97 port.iloc[0,5]=a3 98 port.iloc[0,6]=a4 99 port.iloc[0,7]=a5 100 port.iloc[0,8]=a6 101 port.iloc[0,9]=a7 102 103 for i in range(1,len(port)): 104 p1=port['p1'].iloc[i]#今日のAAPLの株価 105 p2=port['p2'].iloc[i]#今日のMSFTの株価 106 p3=port['p3'].iloc[i]#今日のAMZNの株価 107 p4=port['p4'].iloc[i]#今日のAMZNの株価 108 p5=port['p5'].iloc[i]#今日のAMZNの株価 109 p6=port['p6'].iloc[i]#今日のAMZNの株価 110 p7=port['p7'].iloc[i]#今日のAMZNの株価 111 112 p1_0=port['p1'].iloc[i-1]#前日のAAPLの株価 113 p2_0=port['p2'].iloc[i-1]#前日のMSFTの株価 114 p3_0=port['p3'].iloc[i-1]#前日のAMZNの株価 115 p4_0=port['p4'].iloc[i-1]#前日のAMZNの株価 116 p5_0=port['p5'].iloc[i-1]#前日のAMZNの株価 117 p6_0=port['p6'].iloc[i-1]#前日のAMZNの株価 118 p7_0=port['p7'].iloc[i-1]#前日のAMZNの株価 119 120 a1_0=port['a1'].iloc[i-1]#前日のAAPLの保有株数 121 a2_0=port['a2'].iloc[i-1]#前日のMSFTの保有枚数 122 a3_0=port['a3'].iloc[i-1]#前日のAMZNの保有枚数 123 a4_0=port['a4'].iloc[i-1]#前日のAMZNの保有枚数 124 a5_0=port['a5'].iloc[i-1]#前日のAMZNの保有枚数 125 a6_0=port['a6'].iloc[i-1]#前日のAMZNの保有枚数 126 a7_0=port['a7'].iloc[i-1]#前日のAMZNの保有枚数 127 128 v_0=port['v'].iloc[i-1]#前日のリバランスポートフォリオの価値 129 130 #v=a1_0*(p1-p1_0)+a2_0*(p2-p2_0)+v_0#今日のリバランスポートフォリオの価値 131 132 v=a1_0*p1+a2_0*p2+a3_0*p3+a4_0*p4+a5_0*p5#今日のリバランスポートフォリオの価値 133 134 135 port.iloc[i,14]=v#リバランスポートフォリオの価値のアップデート 136 137 138 port.iloc[i,7]=a1#AAPLの株数のアップデート 139 port.iloc[i,8]=a2#MSFTの株数のアップデート 140 port.iloc[i,9]=a3#AMZNの株数のアップデート 141 port.iloc[i,10]=a4#AMZNの株数のアップデート 142 port.iloc[i,11]=a5#AMZNの株数のアップデート 143 port.iloc[i,12]=a6#AMZNの株数のアップデート 144 port.iloc[i,13]=a7#AMZNの株数のアップデート 145 146 port['v2']=port.p1/5+port.p2/5+port.p3/5+port.p4/5+port.p5/5 #リバランスの無いポートフォリオの価値 147 return port 148port=portfolio_rebalance(AAPL,MSFT,AMZN,GOOG,PSQ,QQQ,SPY) 149 150plt.figure(figsize=(15, 15), dpi=50)#グラフの大きさ 151 152#下記の内容は対数変換されたデータをプロット 153# lnport.v.plot(label="効率的フロンティア",linewidth=1.0) 154# lnport.v2.plot(label="ウェイトを3等分",linewidth=1.0) 155# lnAAPL.plot(label='AAPL',style='-.',fontsize=30)#目盛りの文字の大きさを変更 156# lnMSFT.plot(label='MSFT',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 157# lnAMZN.plot(label='AMZN',linestyle='--',fontsize=30)#目盛りの文字の大きさを変更 158 159 160#下記は元のプロット 161port.v.plot(label="効率的フロンティア",linewidth=1.0) 162 163QQQ.plot(label='QQQ',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 164SPY.plot(label='SPY',linestyle="solid",fontsize=30)#目盛りの文字の大きさを変更 165 166plt.axvline(x = '2021-04-14', color = 'red', ls = 'dotted') 167plt.margins(x=0) 168plt.legend(loc="upper left",fontsize=30) 169plt.grid(True) 170plt.title("効率的フロンティア、SP500、NASDAQ100、パフォーマンス",fontsize=40) 171plt.show() 172
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/21 05:55