pythonplotly-python

Python plotly - add horizontal line to legend


I would like to add a horizontal line to the below charts so it will appear in the legend as well.

The goal is to allow to make the line appear\disappear per user choice by clicking on the legend. Any ideas?

import plotly.graph_objects as go

tips = px.data.tips()
fig = make_subplots(rows=2, cols=2, shared_xaxes=False, vertical_spacing=0.3,horizontal_spacing=0.05)

#Scatter plot
fig.append_trace(go.Scatter(
        x=tips['total_bill'],
        y=tips['tip'], 
        mode = 'markers',
        marker=dict( size=7),
        showlegend = True), 
        row=1, col=1)

#Box plot
fig.add_trace(go.Box(
            y=tips['tip'],
            x = tips['sex'],
            boxpoints='all',jitter=0.5,whiskerwidth=0.2,marker_size=5,line_width=2),
            row=1, col=2)

#Add horizontal lines
shapes = [
{'type': 'line','x0': 5,'y0': 5,
'x1': 50,'y1' : 5,'xref': 'x1', 
'yref': 'y1','line': {'color': 'red','width': 4, 'dash':'dashdot'}},

{'type': 'line','x0': 'Female','y0': 5,
'x1': 'Male','y1' : 5,'xref': 'x2', 
'yref': 'y2','line': {'color': 'red','width': 4, 'dash':'dashdot'}},
        ]

fig['layout'].update(shapes=shapes)

fig.show()

enter image description here


Solution

  • Store all your traces in a list. Then add each of your plots to the list.

    fig = go.Figure()
    data = []
    
    data.append(go.Scatter(
            x=tips['total_bill'],
            y=tips['tip'], 
            mode = 'markers',
            marker=dict( size=7))
    
    data.append(
        go.Scatter(
            x=(5,5),
            y=(50,5),
            mode='lines',
            name='trace 0',
            yaxis='y1'
        ))
    
    layout = go.Layout(title='Some Title',showlegend=True)
    
    fig = go.Figure(data=data, layout=layout)
    
    fig.show()