【问题标题】:Plotly express line chart mark specific points and retain hover dataPlotly 表达折线图标记特定点并保留悬停数据
【发布时间】:2021-10-14 07:15:06
【问题描述】:

考虑以下示例数据框。

import pandas as pd
import numpy as np


df = pd.DataFrame({
    'id': list(range(1000, 2000)),
    'y1': np.random.randn(1000, ),
    'y2': 1 + np.random.randn(1000, )
})

现在我想按“y1”以降序对数据框进行排序,并绘制 x 与 y1 的图。同时将 id 和 y2 显示为悬停数据。

from plotly import express as px

df = df.sort_values('y1', ascending=False, ignore_index=True)
df['x'] = df.index
fig = px.line(df, x='x', y='y1', hover_data=['id', 'y2'])

现在我想将 x 轴上的 3 个点(比如 100、200、300)标记为特殊点,并仅在这些点上添加标记

这是我尝试过的:

from plotly import graph_objects as go

fig.add_trace(
    go.Scatter(
        x=[100, 200, 300],
        y=[df.at[100, 'y1'], df.at[200, 'y1'], df.at[300, 'y1']],
        mode='markers',
        name='Ground Truth'
    )
)

但这使得当我将鼠标悬停在表单 (x_special, y1(x_special)) 的标记点时,数据框中的 hover_data 丢失了,我再也看不到这些点的 id, y2 信息。

如何只用标记标记这些特殊点,并且仍然保留数据框中的悬停数据信息。

如果有人有其他/更好的方式来表明某些 x 值是特殊的,我也可以。

【问题讨论】:

    标签: python pandas plotly


    【解决方案1】:
    • 有与您的问题相匹配的模拟数据。另外以随机方式挑选了Ground Truth标记
    • 设置hoverinfo的简单案例
    import pandas as pd
    import numpy as np
    import plotly.express as px
    import plotly.graph_objects as go
    
    # generate some data...
    df = pd.DataFrame(
        {
            "y1": np.random.uniform(1, 5, 50),
            "id": np.random.randint(1, 4, 50),
            "y2": np.random.uniform(5, 7, 50),
        }
    )
    df = df.sort_values("y1", ascending=False, ignore_index=True)
    df["x"] = df.index
    fig = px.line(df, x="x", y="y1", hover_data=["id", "y2"])
    
    # pick points that are special...
    df2 = df.iloc[np.unique(np.random.randint(0, len(df), 5))]
    
    # add special markers without hoverinfo
    fig.add_traces(
        go.Scatter(
            x=df2.index, y=df2["y1"], mode="markers", name="Ground Truth", hoverinfo="skip"
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2019-04-27
      • 1970-01-01
      • 2022-06-28
      • 2017-08-11
      相关资源
      最近更新 更多