sam_sam
sam_sam

Reputation: 469

How to add labels to subplots in plotly?

I am trying to plot a candlestick with volume, using the plotly. However I can not get the proper x and yaxis label.please help.I need y labels for both plot but xlabel for just the bottom one, also one title for both. Bellow is the code.

** one more question, how can I change the line color in the volume plot.Thank you

import numpy as np
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from plotly import tools


stock = 'AAPL'
df = web.DataReader(stock, data_source='yahoo', start='01-01-2019')



def chart_can_vol(df):
    fig = tools.make_subplots(
        rows=3, cols=1,
        specs=[[{"rowspan": 2}], 
               [None],
               [{}]],
        shared_xaxes=True,
    vertical_spacing=0.1)

    fig.add_trace(go.Candlestick(x = df.index,
                                open = df['Open'],
                                close = df['Close'],
                                low = df['Low'],
                                high = df['High']),
                 row = 1, col = 1)
    fig.update_layout(xaxis_rangeslider_visible = False)
    fig.update_layout(
    yaxis_title = 'Apple Stock Price USD ($)'
    )
    
    
    fig.add_trace(go.Scatter(x = df.index, 
                             y = df['Volume']), 
                             row = 3, col = 1)
    fig.update_layout(
        yaxis_title = 'Volume',
        xaxis_title = 'Date'
    )


    fig.update_layout(title_text="Apple Stock")
    
    fig.update_layout(width=900, height=900)

    return fig

chart_can_vol(df)

Upvotes: 0

Views: 4397

Answers (1)

DapperDuck
DapperDuck

Reputation: 2859

When you make your subplots, you can add the subplot_titles attribute. In the code below, I used the titles "test1" and "test2". When you change your axis labels, you can use update_xaxes and update_yaxes, just make sure that the row and column values are the same for the update_axes method and the subplot.

To change the color of the line, you can add the line attribute within the scatterplot method and set it equal to a dictionary with a hex value of the color you want.

P.S. You should update plotly, because the tools.make_subplots was deprecated. Once you update, you can simply use make_subplots. Also, you are using pandas, when you should use pandas-datareader. See import statements.

Code:

import numpy as np
import pandas as pd
import pandas_datareader.data as web
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from plotly import tools


stock = 'AAPL'
df = web.DataReader(stock, data_source='yahoo', start='01-01-2019')



def chart_can_vol(df):
    subplot_titles=["test1", "test2"]
    rows = 2
    cols = 2
    height = 300 * rows
    
    fig = make_subplots(
        rows=3, cols=1,
        specs=[[{"rowspan": 2}], 
               [None],
               [{}]],
        shared_xaxes=True,
        subplot_titles=("test1", "test2"),
        vertical_spacing=0.1)

    fig.add_trace(go.Candlestick(x = df.index,
                                open = df['Open'],
                                close = df['Close'],
                                low = df['Low'],
                                high = df['High']),
                 row = 1, col = 1)
    fig.update_layout(xaxis_rangeslider_visible = False)
    fig.update_layout(
    yaxis_title = 'Apple Stock Price USD ($)'
    )
    
    
    fig.add_trace(go.Scatter(x = df.index, 
                             y = df['Volume'],
                             line= dict(color="#ffe476")),
                             row = 3, col = 1)

    fig.update_xaxes(title_text="Date", row = 3, col = 1)
    fig.update_yaxes(title_text="Volume", row = 3, col = 1)


    fig.update_layout(title_text="Apple Stock")
    
    fig.update_layout(width=900, height=900)

    return fig

chart_can_vol(df).show()

Upvotes: 1

Related Questions