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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

Q&A

0回答

2455閲覧

matplotlibでhline(水平線)が引けない

todatail

総合スコア4

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

0グッド

0クリップ

投稿2021/01/21 14:57

編集2021/01/21 15:03

株価の分析にpythonを活用したくて、
matplotlibを用いてグラフ化の勉強をしているのですが、

なぜかplt.hlinesで水平線を引くことが出来ません。
参考しにしているのは下記、キノコードさんの動画です。(12:30あたり)
リンク内容

import pandas as pd import numpy as np import talib as ta from pandas_datareader import data import matplotlib.pyplot as plt %matplotlib inline import warnings warnings.simplefilter('ignore') start = '2020-01-18' end = '2021-01-18' df = data.DataReader('^N225', 'yahoo', start, end) date=df.index close=df['Adj Close'] df['macd'], df['macdsignal'], df['macdhist'] = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) plt.figure(figsize=(30,15)) plt.subplot(2,1,1) plt.plot(date,close,label='Close',color='#99b898') plt.legend() plt.subplot(2,1,2) plt.fill_between(date,df['macdhist'], color='grey', alpha=0.5, label='MACD_hist') plt.hlines(0,start,end,"gray",linestyles="dashed") plt.legend()

上記のコードの中で、
plt.hlines(0,start,end,'gray',linestyles='dashed')
の部分を削除して走らせると、何も問題はないのですが、
この一文を加えると、エラーが出ます。
(グラフは表示されますが、水平線が表示されません。)

ちなみに、試しに簡単なグラフで水平線を引いてみたのですが、
こちらはうまく出来ました。

from matplotlib import pyplot as plt plt.figure(figsize=(30,15)) xdata = list(range(10)) ydata = [_*2 for _ in xdata] plt.plot(xdata, ydata, 'b') plt.hlines(y=5, xmin=0, xmax=10) plt.vlines(x=5, ymin=0, ymax=20) plt.grid() plt.show()

エラー内容
AttributeError Traceback (most recent call last)
AttributeError: 'numpy.str_' object has no attribute 'toordinal'

The above exception was the direct cause of the following exception:

ConversionError Traceback (most recent call last)

ConversionError: Failed to convert value(s) to axis units: '2020-01-18'

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

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

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

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

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

tiitoi

2021/01/21 15:31

hlines() に渡している start が文字列なのが原因です。 hlines() にわたすのは数値でないといけません。エラーはそのことを言っています。
todatail

2021/01/23 13:42

質問への回答ありがとうございます。 start = '2020-01-18' end = '2021-01-18' と代入していたつもりでしたが、 文字列の時点でエラーが出てしまったということですね。 下記のコードに変更して解決しました。 ありがとうございました。 plt.hlines(0,datetime.datetime.strptime(start,"%Y-%m-%d").date(),datetime.datetime.strptime(end,"%Y-%m-%d").date(),"gray",linestyles="dashed")
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問