Search code examples
python-3.xplotly

How to add hoverdata to the argument of fig.add_scatter in plotly


How to add hover data to the argument of fig.add_scatter in plotly? It belongs to fig = px.scatter, but I used this for a point to provide name argument. Thank you

Here is the data:

file:
1       27  10  20.10.2021
2       10  11  21.10.2021
3       10  2   28.10.2021    
4       13  8   05.11.2021
5       17  5   17.11.2021

Here is the code:

import plotly.express as px
import numpy as np
import pandas as pd
import plotly.graph_objects as go

datum = np.loadtxt('file', unpack=True, dtype='str', usecols=[3])
cislo, K, H = np.loadtxt('file', unpack=True, usecols=[0, 1, 2])

d = {'Datum': datum, 'B': K, 'C': H, 'cislo': cislo}
df = pd.DataFrame(data=d)

fig = px.scatter(df, x=[-100], y=[100]) # hover_data=['datum']

fig.add_scatter(x=df['cislo'], y=df['C'], hoverinfo='skip', mode="markers", marker=dict(size=10,color='Purple'), name = 'C')

fig.add_scatter(x=df['cislo'], y=df['B'], hoverinfo='skip', mode="markers", marker=dict(size=10,color='Green'), name = 'B')

fig.update_traces(
    hovertemplate="<br>".join([
        "<b>Value:</b>       %{y:.0f}",
        "<b>Date:</b>              %{customdata[0]}",
     ])
    )
fig.update_traces(mode='lines+markers')

layout = go.Layout(
    yaxis_range=[0,28],
    xaxis_range=[0.5,6],
    legend=dict(
        yanchor="top",
        y=0.95,
        xanchor="left",
        x=0.73,
     ),
    hoverlabel=dict(
        bgcolor="White",
    )
)
fig.layout = layout
fig.show()

Solution

    • given the way you have structured hovertemplate the following works.
    • add_scatter() is core API method (graph objects) rather than plotly express
    import plotly.express as px
    import numpy as np
    import pandas as pd
    import plotly.graph_objects as go
    
    with open("file", "w") as f:
        f.write("""1       27  10  20.10.2021
    2       10  11  21.10.2021
    3       10  2   28.10.2021    
    4       13  8   05.11.2021
    5       17  5   17.11.2021""")
    
    datum = np.loadtxt("file", unpack=True, dtype="str", usecols=[3])
    cislo, K, H = np.loadtxt("file", unpack=True, usecols=[0, 1, 2])
    
    d = {"Datum": datum, "B": K, "C": H, "cislo": cislo}
    df = pd.DataFrame(data=d)
    
    fig = px.scatter(df, x=[-100], y=[100])  # hover_data=['datum']
    
    fig.add_scatter(
        x=df["cislo"],
        y=df["C"],
        customdata=df["Datum"].values.reshape([len(df), 1]),
        hoverinfo="skip",
        mode="markers",
        marker=dict(size=10, color="Purple"),
        name="C",
    )
    
    fig.add_scatter(
        x=df["cislo"],
        y=df["B"],
        customdata=df["Datum"].values.reshape([len(df), 1]),
        hoverinfo="skip",
        mode="markers",
        marker=dict(size=10, color="Green"),
        name="B",
    )
    
    fig.update_traces(
        hovertemplate="<br>".join(
            [
                "<b>Value:</b>       %{y:.0f}",
                "<b>Date:</b>              %{customdata[0]}",
            ]
        )
    )
    fig.update_traces(mode="lines+markers")
    
    layout = go.Layout(
        yaxis_range=[0, 28],
        xaxis_range=[0.5, 6],
        legend=dict(
            yanchor="top",
            y=0.95,
            xanchor="left",
            x=0.73,
        ),
        hoverlabel=dict(
            bgcolor="White",
        ),
    )
    fig.layout = layout
    fig