matplotlib / matplotlib/mplfinance

Bug Report: Errors occur for NaN columns.

オープン 初心者向け
#672 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

bug
主要言語
Python
スター
4.4k
フォーク
678
PR マージ指標
30日以内にマージされた PR はありません

説明

issue case

When animating over a limited visual range, as in this example, the possibility arises that the signal columns are all NaN.

https://github.com/matplotlib/mplfinance/assets/37892107/a5afea85-57ce-4282-ad7c-955240c54787

issue

mplfinance\plotting.py", line 1108, in _addplot_columns
ymhi = math.log(max(math.fabs(np.nanmax(yd)),1e-7),10)
This Numpy code generates an error.
"ValueError: zero-size array to reduction operation maximum which has no identity"

Error reproduction

import datetime

import numpy as np
import pandas as pd
import mplfinance as mpf

# ランダムなOHLCデータを生成する関数
def generate_sample_ohlc_data(n=10):
    # 現在の日付を取得
    base_date = datetime.datetime.now()
    # 日付のリストを生成
    dates = [base_date - datetime.timedelta(days=i) for i in range(n)]
    dates.reverse()

    # ランダムな価格データを生成
    rand = np.random.default_rng().uniform
    open = [100]
    high = [100.02]
    low = [100.02]
    close = [100.05]
    for i in range(n-1):
        open.append(close[i])
        close.append(open[-1] + rand(-0.1, 0.1))
        high.append(max(open[-1],close[-1]) + rand(0, 0.05))
        low.append(min(open[-1],close[-1]) - rand(0, 0.05))

    # DataFrameに格納
    ohlc_data = pd.DataFrame({
        "date": dates,
        "open": open,
        "high": high,
        "low": low,
        "close": close
    })

    return ohlc_data.set_index("date", drop=True)

period_range = 50
df = generate_sample_ohlc_data(period_range)
df["signal"] = np.nan
print(df)

some_signal = mpf.make_addplot(df["signal"])
mpf.plot(df, type='candle', addplot=some_signal) # ValueError

Currently, we have worked around this by doing NaN pre-checking on the user side, but it would be great if the library could handle this.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

issue の再現から始め、mplfinance/plotting.py の _addplot_columns、特に 1108 行付近の np.nanmax 呼び出しを調査します。NaN 値のみを含む addplot 列で失敗を確認します。完了条件は、そのデータをプロットしてもサイズ 0 のリダクションに関する ValueError が発生しなくなることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
numpy, pandas, python
領域
data-visualization
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
62/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。