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

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

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

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

Q&A

解決済

1回答

1741閲覧

python作成によるグラフで指定した期間の縦線と指定した値の横線の入れ方

takachan

総合スコア5

Python

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

0グッド

1クリップ

投稿2022/04/08 13:57

python作成によるグラフを作成しました。指定した期間の縦線と指定した値の横線をいれたいのですが、下記のコードをいれても上手く表示されないです。

例えば、日付の縦線なら2021/3/31~2021/4/10の期間に縦線を入れたいです。

そして、横線は

ax1.axhline(y = 0, color = 'red', ls = 'dotted')
ax1.axhline(y = 1, color = 'red', ls = 'dotted')

と、2つになってますコードを0と1に横線をいれるために1つにまとめたいです。

Python

1import numpy as np 2import pandas as pd 3import datetime as dt 4import pandas_datareader.data as web 5import yfinance as yf 6import japanize_matplotlib 7 8 9s = dt.date(1995, 1, 1) 10e = dt.date.today() 11 12#米債利回りデータの取得(FREDから取得) 13df_3month = web.DataReader("DTB3", "fred", s, e) 14df_2 = web.DataReader("DGS2", "fred", s, e) 15df_3 = web.DataReader("DGS3", "fred", s, e) 16df_5 = web.DataReader("DGS5", "fred", s, e) 17df_7 = web.DataReader("DGS7", "fred", s, e) 18df_10 = web.DataReader("DGS10", "fred", s, e) 19df_20 = web.DataReader("DGS20", "fred", s, e) 20df_30 = web.DataReader("DGS30", "fred", s, e) 21 22 23#米株価指数データの取得(米ヤフーファイナンスから取得) 24codelist = ["QQQ"] 25df_QQQ = yf.download(codelist, s, e)["Adj Close"] 26 27 28#米株価を含めたデータの定義 29df = pd.concat([df_3month,df_2,df_3, df_5, df_7,df_10, df_20, df_30,df_QQQ], axis=1) 30 31 32#米株価を除いたデータの定義 33df_port = pd.concat([df_3month,df_2,df_3, df_5, df_7,df_10, df_20, df_30], axis=1) 34 35 36#米株価を除いた、米債利回りだけのチャート 37df_port.plot(figsize=(17,10),fontsize=15) 38 39df['spread5-2'] = df['DGS5'] - df['DGS2'] 40df['spread10-3month'] = df['DGS10'] - df['DTB3'] 41df['spread10-2'] = df['DGS10'] - df['DGS2'] 42df['spread10-3'] = df['DGS10'] - df['DGS3'] 43df['spread10-7'] = df['DGS10'] - df['DGS7'] 44df['spread30-5'] = df['DGS30'] - df['DGS5'] 45df['spread30-20'] = df['DGS30'] - df['DGS20'] 46 47df['QQQ']=df_QQQ 48 49 50#米10年債利回り - 米2年債利回り、2つめのコードの書き方として、下記のような定義付けもできる 51 52#spread = df_10['DGS10'] - df_2['DGS2'] 53 54 55df['spread5-2'].plot(figsize=(15,10),fontsize=15) 56df['spread10-3month'].plot(figsize=(15,10),fontsize=15) 57df['spread10-2'].plot(figsize=(15,10),fontsize=15) 58df['spread10-3'].plot(figsize=(15,10),fontsize=15) 59df['spread10-7'].plot(figsize=(15,10),fontsize=15) 60df['spread30-5'].plot(figsize=(15,10),fontsize=15) 61 62 63 64#凡例を置く 65#下記の方法で「ax1」を定義すると、凡例が2回表示されるので、凡例が一番最後(この場合はdf['spread30-20'])にくるものを抽出したほうがよい。 66 67ax1 = df['spread30-20'].plot(figsize=(15,10),fontsize=15,color='blue',label='spread30-20') 68ax1.axhline(y = 0, color = 'red', ls = 'dotted') 69ax1.axhline(y = 1, color = 'red', ls = 'dotted') 70 71ax1.axvline( = '2021-03-30', color = 'red', ls = 'dotted') 72 73ax2 = ax1.twinx() 74df_QQQ.plot(figsize=(15,10),fontsize=15,color='green',ax=ax2,label='QQQ') 75 76#凡例(legend) 77lines1, labels1 = ax1.get_legend_handles_labels() 78lines2, labels2 = ax2.get_legend_handles_labels() 79ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')#左記は「lines1」と「lines2」を合わせて左上に表示するという意味 80 81 82#ax2.legend(fontsize=10,loc='upper right', borderaxespad=0.5)#「ax2」用として右側に別記して凡例を表示させる方法 83 84 85 86#タイトルを表示 87ax1.set_title("各年月イールドスプレッド(左軸:%)とQQQ(右軸:pt)",fontsize=20) 88 89 90

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1ax1.axvline(x = '2021-03-31', color = 'red', ls = 'dotted') 2ax1.axvline(x = '2021-04-10', color = 'red', ls = 'dotted')

期間が20年もありますので、そのスケールで 2021-03-312021-04-10 の時点に垂直線を描画しても重なって見える事になります。

ルーペアイコンをクリックして、対象期間近傍を表示
イメージ説明

投稿2022/04/08 14:36

melian

総合スコア19798

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

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

takachan

2022/04/08 15:05

では、2020/3/31~2021/4/10この期間全部に色をつけられますか? それと ax1.axhline(y = 0, color = 'red', ls = 'dotted') ax1.axhline(y = 1, color = 'red', ls = 'dotted') この式を1つにして、0と1に横線をひけますか?
melian

2022/04/08 15:14

> では、2020/3/31~2021/4/10この期間全部に色をつけられますか? ax1.axvspan('2021-03-31', '2021-04-10', color = 'red', alpha = 0.3) > この式を1つにして、0と1に横線をひけますか? [ax1.axhline(y = v, color = 'red', ls = 'dotted') for v in (0, 1)]
takachan

2022/04/08 23:21

ありがとうございます。 〔縦の日付〕 下記コードで2021/3/31~2021/4/10の期間全部に色を付けられました。 ax1.axvspan('2021-03-31', '2021-04-10', color = 'red', alpha = 0.3) 今度は 1日だけ縦線をいれようとして、下記コードにしたら、 ax1.axvspan('2021-02-0', color = 'red', alpha = 0.3) TypeError: axvspan() missing 1 required positional argument: 'xmax' とエラーがでてしまいました。 〔横線の数値〕 下記のコードにて2つ線を取得できました。 [ax1.axhline(y = v, color = 'red', ls = 'dotted') for v in (0, 1)] この「0」~「1」の間にすべて色をつけるにはどうしたらいいですか?
melian

2022/04/09 00:32

> 今度は 1日だけ縦線をいれようとして、 axvline() を使って下さい(axvspan() は塗りつぶしなので範囲を指定する必要があります)。 ax1.axvline(x = '2021-02-01', color = 'red', ls = 'dotted') > この「0」~「1」の間にすべて色をつける こちらは axhspan を使います。 ax1.axhspan(0, 1, color = 'red', alpha = 0.3)
takachan

2022/04/09 00:48

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問