如何在 plotly 中将 error_y 添加到 fig.add_scatter?

How to add error_y to fig.add_scatter in plotly?

如何将error_y添加到fig.add_scatter,请问?与 px.scatter 不同,参数 error_y 不适用于 fig.add_scatter。如果我仔细查看,我没有在文档中找到任何合适的参数。存在吗?

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], error_y=[10])  

# How to add error_y to fig.add_scatter?
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")

fig.show()

文档中对此进行了介绍:https://plotly.com/python/error-bars/#error-bars-as-a-percentage-of-the-y-value

您的代码已更新以显示此操作。

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)

# define additional columns
df["Datum2"] = (
    pd.to_datetime(df["Datum"], infer_datetime_format=True) + pd.Timedelta(days=3)
).dt.strftime("%d.%m.%Y")

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

fig.add_scatter(
    x=df["cislo"],
    y=df["C"],
    customdata=df.loc[:, ["Datum", "Datum2"]].values.reshape([len(df), 2]),
    hoverinfo="skip",
    mode="markers",
    marker=dict(size=10, color="Purple"),
    name="C",
    error_y={"type": "percent", "value": 30, "visible": True},
)

fig.add_scatter(
    x=df["cislo"],
    y=df["B"],
    customdata=df.loc[:, ["Datum", "Datum2"]].values.reshape([len(df), 2]),
    hoverinfo="skip",
    mode="markers",
    marker=dict(size=10, color="Green"),
    name="B",
    error_y={"type": "percent", "value": 30, "visible": True},
)

fig.update_traces(
    hovertemplate="<br>".join(
        [
            "<b>Value:</b>%{y:.0f}",
            "<b>Date:</b>%{customdata[0]}",
            "<b>Date2:</b>%{customdata[1]}",
        ]
    )
)
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