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

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

ただいまの
回答率

87.37%

pythonでpandasとmatplotlibとpandas_datareaderを使用してチャートを一部だけ表示したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 578

score 43

こんにちは。
今タイトルにあるライブラリを使用してチャートを表示する挑戦をしています。
なんとか最低限のチャート表示はできたのですが、平均線も表示するために、一定以上の期間のデータ(1年間以上)を読み込む必要があります。
しかし、実際に見たいのはここ1ヶ月ほどのチャートです。
プロットしてから拡大すればいいのですが、最終的には自動でここ1ヶ月のチャートだけ表示して画像として出力したいです。
(つまり拡大作業を省きたい)

xlim()を使用する以外に期間を絞る方法はありますか??

元はこれです
この画像をこんな風にしたいです。↓
手動で拡大したのも

お分かりになる方がいらっしゃいませんか??
教えていただけないでしょうか。。。
よろしくお願いいたします。

ちなみに

import matplotlib.pyplot as plt

end = pd.datetime.today() #今日の日付

plot_start = (pd.Period(end, 'D')-100).start_time  #今日から100日前の日付

print(type(plot_start))  #<class 'pandas._libs.tslibs.timestamps.Timestamp'>


まではわかっていますが、出力制御がわかりません。。。

進展

left, right = plt.xlim() #引っ張ってきたデータのx軸の範囲を取得(float型?)
left_Start = right - 150 #丁度いい日付まで戻します

plt.xlim(left_Start,right) #ここでx軸の範囲を指定

#出力してみました


y軸(価格軸)がよしなにしてくれていない状態です。。。
y軸を丁度良くするにはどうすればいいのでしょうか??
自動でやってくれたりしないのかと調査しています。
進展しました

解決しました!!

APIを叩いて受け取ったデータを使用して計算をした後、そのデータを追加したCSVデータを作成。
そのCSVを読み込んで描画することで期待していたチャートが描けました!!
まだまだこれから改良をしますが、こちらの問題は一旦解決したので閉めさせていただきます!!
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Pandasのデータフレームで移動平均を含む株価データを保持して
おられのでしたら、
たとえば2002年から今日までのデータがあるとして

>>> print(data)
               Close    100日移動平均      350日移動平均
DATE                                          
2002-06-06  11574.94  11029.3854  11774.651143
2002-06-07  11438.53  11038.3864  11768.214114
2002-06-10  11370.21  11047.6726  11761.078686
2002-06-11  11449.44  11060.0865  11754.904200
2002-06-12  11327.06  11071.5813  11748.888229
...              ...         ...           ...
2020-02-21  23386.74  23167.1789  21982.581257
2020-02-25  22605.41  23172.2446  21983.433686
2020-02-26  22426.19  23176.3050  21983.585400
2020-02-27  21948.23  23175.3049  21981.538371
2020-02-28  21142.96  23167.9455  21977.362229

[4344 rows x 3 columns]

過去30日分に絞り込む場合は、以下のように指定できます。

>>> print(data[-30:])

               Close    100日移動平均      350日移動平均
DATE                                          
2020-01-16  23933.13  22541.2951  21907.411029
2020-01-17  24041.26  22577.5196  21911.742686
2020-01-20  24083.51  22612.7231  21916.246086
2020-01-21  23864.56  22644.5965  21919.679857
2020-01-22  24031.35  22678.7243  21923.642829
2020-01-23  23795.44  22710.3986  21927.062971
2020-01-24  23827.18  22741.5613  21931.431829
2020-01-27  23343.51  22772.3860  21935.677771
2020-01-28  23215.71  22799.9823  21938.133857
2020-01-29  23379.40  22828.9821  21941.491514
2020-01-30  22977.75  22854.1503  21943.736400
2020-01-31  23205.18  22879.1584  21946.407257
2020-02-03  22971.94  22902.6759  21948.615657
2020-02-04  23084.59  22927.2702  21951.086686
2020-02-05  23319.56  22953.9744  21953.821000
2020-02-06  23873.59  22981.8509  21958.000343
2020-02-07  23827.98  23008.1350  21961.503800
2020-02-10  23685.98  23031.8106  21964.036200
2020-02-12  23861.21  23056.5017  21967.029743
2020-02-13  23827.73  23078.8014  21969.828343
2020-02-14  23687.59  23098.0812  21972.165743
2020-02-17  23523.24  23113.4307  21974.046000
2020-02-18  23193.80  23125.3555  21975.435771
2020-02-19  23400.70  23139.7554  21977.446629
2020-02-20  23479.15  23154.1024  21980.013257
2020-02-21  23386.74  23167.1789  21982.581257
2020-02-25  22605.41  23172.2446  21983.433686
2020-02-26  22426.19  23176.3050  21983.585400
2020-02-27  21948.23  23175.3049  21981.538371
2020-02-28  21142.96  23167.9455  21977.362229

こんなふうにデータの範囲を絞ってチャートを描いてみてはいかがでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/10 09:49

    ご回答ありがとうございます!
    平均線はこちらで計算しているので、データレームから抜き出す方法はしていないのですが、`print(data[-30:])`という考えから少し改良して何とかx軸はいい感じにできました。
    追記しておきます!

    ただ、まだy軸がよしなにしてくれないので、困っています。。。
    引き続きヒントでも頂ければ嬉しいです!

    キャンセル

  • 2020/03/27 21:52

    その後ですが、データを取ってきた後に、計算した結果を追加したcsvを作成して、そのCSVデータを読み込んでグラフにすることができました!!
    先日は理解していなかったようで、回り道をしていました。。。
    無事解決できました!ありがとうございます!!

    キャンセル

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る