Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

mplfinance default values rise error in plot function

Aperta
#681 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
38/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Inizia in plotting.py dai validator della configurazione di addplot e alines citati nel report, quindi segui come queste opzioni vengono passate a mpf.plot(). Riproduci la chiamata con entrambe le opzioni vuote e confrontala con un normale grafico a candele. Il lavoro è concluso quando una configurazione vuota di addplot e alines viene accettata senza errori dei validator e il grafico continua a essere visualizzato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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?

Lingua principale
Python
Stelle
4.4k
Fork
678
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di matplotlib/mplfinance

Tutte le issue di matplotlib/mplfinance

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.