Python Plotly – How to add multiple Y-axes?

12 Jan, 2022
In this article let’s see how to add multiple y-axes of different scales in Plotly charts in Python.
Currently, Plotly Express does not support multiple Y axes on a single figure. So, we shall use Plotly go. Plotly provides a function called make_subplots() to plot charts with multiple Y – axes. 
Syntax:
plotly.subplots.make_subplots(rows=1, cols=1, specs=None)
Parameter:
rows: A number of rows in the subplot grid. (rows > 0). default 1
cols: A number of columns in the subplot grid. (cols> 0). default 1
specs: (list of lists of dict or None (default None)). Per subplot specifications of subplot type, row/column spanning, and spacing.
First, import the necessary functions from the Plotly package and create the secondary axes using the specs parameter in the make_subplots() function as shown. Plot a scatter plot with multiple y-axes. Make the chart readable by adding titles to the x and y axes.
Example: Adding 2 y-axis
Python3
# import graph_objects from plotly packageimport plotly.graph_objects as go # import make_subplots function from plotly.subplots# to make grid of plotsfrom plotly.subplots import make_subplots # use specs parameter in make_subplots function# to create secondary y-axisfig = make_subplots(specs=[[{"secondary_y": True}]]) # plot a scatter chart by specifying the x and y values# Use add_trace function to specify secondary_y axes.fig.add_trace(    go.Scatter(x=[10, 20, 30], y=[400, 500, 600], name="yaxis values"),    secondary_y=False) # Use add_trace function and specify secondary_y axes = True.fig.add_trace(    go.Scatter(x=[20, 30, 40], y=[40, 50, 60], name="yaxis2 values"),    secondary_y=True,) # Adding title text to the figurefig.update_layout(    title_text="Multiple Y Axis in Plotly") # Naming x-axisfig.update_xaxes(title_text="X - axis") # Naming y-axesfig.update_yaxes(title_text="<b>Main</b> Y - axis ", secondary_y=False)fig.update_yaxes(title_text="<b>secondary</b> Y - axis ", secondary_y=True)
 Output:
Plotly scatter plot with multiple y-axes
Example: Adding 2 y-axis 
Python3
# import graph_objects from plotly packageimport plotly.graph_objects as go # import make_subplots function from plotly.subplots# to make grid of plotsfrom plotly.subplots import make_subplots # use specs parameter in make_subplots function# to create secondary y-axisfig = make_subplots(specs=[[{"secondary_y": True}]]) # plot a bar chart by specifying the x and y values# Use add_trace function to specify secondary_y axes.fig.add_trace(    go.Bar(x=[10, 20, 30], y=[40, 50, 60], name="yaxis values"),    secondary_y=False) # Use add_trace function and specify secondary_y axes = True.fig.add_trace(    go.Bar(x=[20, 30, 40], y=[400, 500, 600], name="yaxis2 values"),    secondary_y=True,) # Adding title text to the figurefig.update_layout(    title_text="Multiple Y Axis in Plotly") # Naming x-axisfig.update_xaxes(title_text="X - axis") # Naming y-axesfig.update_yaxes(title_text="<b>Main</b> Y - axis ", secondary_y=False)fig.update_yaxes(title_text="<b>secondary</b> Y - axis ", secondary_y=True)
Output:
Plotly bar chart with multiple y axes
Now, let us look at how to plot a scatter chart with more than 2 Y-axes or multiple Y-axis. The procedure is the same as above, the change comes in the figure layout part to make the chart more visually pleasing.
Import the necessary functions from the Plotly package. Create the secondary axes using the specs parameter in the make_subplots function as shown. Plot a scatter plot with multiple y-axes.
Example: Adding more than multiple y-axis
Python3
# import the graph_objects function from# plotly packageimport plotly.graph_objects as go # initialize a Figure object and store it in# a variable figfig = go.Figure() # add x and y values for the 1st scatter# plot and name the yaxis as yaxis1 valuesfig.add_trace(go.Scatter(    x=[10, 12, 13],    y=[41, 58, 60],    name="yaxis1 values")) # add x and y values for the 2nd scatter# plot and name the yaxis as yaxis2 valuesfig.add_trace(go.Scatter(    x=[12, 13, 14],    y=[401, 501, 610],    name="yaxis2 values",    yaxis="y2")) # add x and y values for the 3rd scatter# plot and name the yaxis as yaxis3 valuesfig.add_trace(go.Scatter(    x=[14, 15, 16],    y=[42000, 53000, 65000],    name="yaxis3 values",    yaxis="y3")) # add x and y values for the 4th scatter plot# and name the yaxis as yaxis4 valuesfig.add_trace(go.Scatter(    x=[15, 16, 17],    y=[2000, 5000, 7000],    name="yaxis4 values",    yaxis="y4")) # Create axis objectsfig.update_layout(    # split the x-axis to fraction of plots in    # proportions    xaxis=dict(        domain=[0.3, 0.7]    ),       # pass the y-axis title, titlefont, color    # and tickfont as a dictionary and store    # it an variable yaxis    yaxis=dict(        title="yaxis 1",        titlefont=dict(            color="#0000ff"        ),        tickfont=dict(            color="#0000ff"        )    ),         # pass the y-axis 2 title, titlefont, color and    # tickfont as a dictionary and store it an    # variable yaxis 2    yaxis2=dict(        title="yaxis 2",        titlefont=dict(            color="#FF0000"        ),        tickfont=dict(            color="#FF0000"        ),        anchor="free",  # specifying x - axis has to be the fixed        overlaying="y",  # specifyinfg y - axis has to be separated        side="left",  # specifying the side the axis should be present        position=0.2  # specifying the position of the axis    ),       # pass the y-axis 3 title, titlefont, color and    # tickfont as a dictionary and store it an    # variable yaxis 3    yaxis3=dict(        title="yaxis 3",        titlefont=dict(            color="#006400"        ),        tickfont=dict(            color="#006400"        ),        anchor="x",     # specifying x - axis has to be the fixed        overlaying="y",  # specifyinfg y - axis has to be separated        side="right"  # specifying the side the axis should be present    ),         # pass the y-axis 4 title, titlefont, color and    # tickfont as a dictionary and store it an    # variable yaxis 4    yaxis4=dict(        title="yaxis 4",        titlefont=dict(            color="#8f00ff"        ),        tickfont=dict(            color="#8f00ff"        ),        anchor="free",  # specifying x - axis has to be the fixed        overlaying="y",  # specifyinfg y - axis has to be separated        side="right",  # specifying the side the axis should be present        position=0.8  # specifying the position of the axis    ))  # Update layout of the plot namely title_text, width# and place it in the center using title_x parameter# as shownfig.update_layout(    title_text="4 y-axes scatter plot in plotly",    width=1000,    title_x=0.5)
Output:
Plotly scatter plot with multiple y – axes
sweetyty
sagartomar9927
Picked
Python-Plotly
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Iterate over a list in Python
How to iterate through Excel rows in Python?
Rotate axis tick labels in Seaborn and Matplotlib
Enumerate() in Python
Deque in Python
Queue in Python
Defaultdict in Python
Read a file line by line in Python
Stack in Python
Different ways to create Pandas Dataframe