[SOLVED] Def function does not work with plotly Python

Issue

I’m trying to def a functin but i can’t call it:

  def test():
      fig = make_subplots(rows=1, cols=2, specs=[
      [{'type': 'scatter'}, {'type': 'table'}]]
                      , shared_xaxes=True,
                      horizontal_spacing=0.05, 
                      vertical_spacing=0.05,  
                      column_widths=[0.7, 0.3])
      pass

  test()

  fig.add_trace(go.Candlestick(x=df.index,
            open=df['Open'],
            high=df['High'],
            low=df['Low'],
            close=df['Close'],
            increasing_line_color = UP_CANDLE,
            decreasing_line_color = DW_CANDLE),row=1,col=1)

When I call it I retrieve the following error: NameError: name ‘fig’ is not defined
If I remove the function, the code works perfectly.

Solution

Once your local variable fig is inside the function, nothing outside of the function test will have access to fig unless you return fig from the function – you can read about scope in python.

I would rewrite your function like this (and pass doesn’t have any purpose in your function so I removed it):

def test():
    fig = make_subplots(
        rows=1, cols=2, 
        specs=[[{'type': 'scatter'}, {'type': 'table'}]], 
        shared_xaxes=True, 
        horizontal_spacing=0.05, 
        vertical_spacing=0.05,  
        column_widths=[0.7, 0.3]
    )
    return fig

Then you can set a variable equal to what your function returns:

fig = test()

And then you’ll be able to access the .add_trace method of `fig

fig.add_trace(go.Candlestick(x=df.index,
        open=df['Open'],
        high=df['High'],
        low=df['Low'],
        close=df['Close'],
        increasing_line_color = UP_CANDLE,
        decreasing_line_color = DW_CANDLE),row=1,col=1)

Answered By – Derek O

Answer Checked By – Mildred Charles (BugsFixing Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *