Reputation: 123
How to add error_y to fig.add_scatter, please? The argument error_y does not work for fig.add_scatter, unlike px.scatter. I did not find any appropriate argument in the documentation provided I looked carefully. Does it exist?
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()
Upvotes: 0
Views: 961
Reputation: 31226
This is covered in the documentation: https://plotly.com/python/error-bars/#error-bars-as-a-percentage-of-the-y-value
Your code updated to show this in action.
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
Upvotes: 1