Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

mplfinance default values rise error in plot function

オープン
#681 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

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

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
38/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
python

調査の方向性

レポートで引用されている addplot と alines の設定バリデーターを確認するところから plotting.py の調査を始め、次にそれらのオプションが mpf.plot() に渡される方法を追跡してください。両方のオプションを空にした状態で呼び出しを再現し、通常のローソク足プロットと比較してください。空の addplot および alines の設定がバリデーターエラーなしで受け入れられ、プロットも引き続き描画されれば完了です。

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

説明

question

Hi!
First of all, thank you for such useful library for plotting candles!

I'm trying to process a scenario, when addplot and alines is empty (at the present moment buys and sells lists have only one point in format ['date','price'], but it doesn't matter for question). So my function, that builds a graph is:

def mplfplotcoin(df,title,
                 buys=[],
                 sells=[],
                 rsi=False):
    
    adp = []

    # adding trades
    if buys: 
        buysdf = pd.DataFrame([buys],columns=['Date', 'OpenPrice']) # when buys list consists of one point
        buysdf = df.merge(buysdf,on='Date',how='left')['OpenPrice'] # left join
        addbuys = mpf.make_addplot(buysdf,scatter=True,markersize=300,marker=6,color='forestgreen',alpha=0.75) # buy markers
        adp.append(addbuys)
    if sells:
        sellsdf = pd.DataFrame([sells], columns=['Date', 'ClosePrice']) # when sells list consists of one point
        sellsdf = df.merge(sellsdf,on='Date',how='left')['ClosePrice'] # left join
        addsells = mpf.make_addplot(sellsdf,scatter=True,markersize=300,marker=7,color='firebrick',alpha=0.75) # sell markers
        adp.append(addsells)
    
    # adding line between trades https://github.com/matplotlib/mplfinance/blob/master/examples/using_lines.ipynb
    if len(buys) == len(sells) and buys: # I know it's awful))) I'll change it later
        tradeline = dict(alines=[tuple(buys),tuple(sells)],colors='lightslategray',linestyle='--',linewidths=2,alpha=0.5)
    else: tradeline = None

    # adding rsi
    if rsi:
        addrsi = mpf.make_addplot((df['rsi']),panel=1,type='line',color='orange',width=1,ylabel='rsi',ylim=(-5,105))
        adp.append(addrsi)

    # checking adp list
    if not adp: adp = None

    # drawing
    mpf.plot(df,
             type='candle',
             style='tradingview',
             volume=True,
             show_nontrading=True,
             addplot=adp,
             alines=tradeline,
             figscale=1.3,
             title=title,
             ylabel='USDT')

so, lines else: tradeline = None and if not adp: adp = None are like this, because I found it in your library file plottin.py:

#211 line:
        'addplot'                   : { 'Default'     : None, 
                                        'Description' : 'addplot object or sequence of addplot objects (from `mpf.make_addplot()`)',
                                        'Validator'   : lambda value: isinstance(value,dict) or (isinstance(value,list) and all([isinstance(d,dict) for d in value])) },

# 267 line:
        'alines'                    : { 'Default'     : None, 
                                        'Description' : 'Draw one or more ARBITRARY LINES anywhere on the plot, by'+
                                                        ' specifying a sequence of two or more date/price pairs, or by'+
                                                        ' specifying a sequence of sequences of two or more date/price pairs.'+
                                                        ' May also be a dict with key `alines` (as date/price pairs described above),'+
                                                        ' plus one or more of the following keys:'+
                                                        ' `colors`, `linestyle`, `linewidths`, `alpha`.',

however I get errors for mpf.plot(..., addplot=adp, alines=tradeline, ...):

TypeError: kwarg "addplot" validator returned False for value: "None"
    'Validator'   : lambda value: isinstance(value,dict) or (isinstance(value,list) and all([isinstance(d,dict) for d in value])) },

and the same for alines parameter:

TypeError: kwarg "alines" validator returned False for value: "None"
    'Validator'   : lambda value: _alines_validator(value) },

If I go to plotting.py, I can't understand why error is rised, because there is only one if about addplot is None:

# 739 line
    addplot = config['addplot']
    if addplot is not None and ptype not in VALID_PMOVE_TYPES:
        ...

# and then 816 line is new condition:
    # fill_between is NOT supported for external_axes_mode
    # (caller can easily call ax.fill_between() themselves).
    if config['fill_between'] is not None and not external_axes_mode:
        ...

Ok, I tried to define ptype in my code:

# checking adp list
if not adp: adp = [mpf.make_addplot(None,type='line')]

But again error:

    raise TypeError('Wrong type for data, in make_addplot()')
TypeError: Wrong type for data, in make_addplot()

Please, help me to understand how to draw plot if addplot and alines (and other kwards) are empty?

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

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

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

はじめの一歩

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

matplotlib/mplfinance のほかの issue

matplotlib/mplfinance の issue をすべて見る

似ている issue

Python の issue をもっと見る

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

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