質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

463閲覧

線グラフで特定期間だけを色付けする

mufufu

総合スコア37

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/21 04:58

線グラフを作り、特定期間だけを色付けしたいです。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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

axvspan() を使います。

python

1#plt.axvline(x = '2021-04-14', color = 'red', ls = 'dotted') 2plt.axvspan('2021-04-14', '2021-05-14', color = 'red', alpha = 0.3)

イメージ説明

投稿2022/02/21 05:18

melian

総合スコア19849

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mufufu

2022/02/21 05:55

ありがとうございます。 できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問