#python #plotly #plotly-dash
Вопрос:
Когда я добавляю v-образную линию на свой график, она работает идеально:
fig.add_vline(
x=pd.to_datetime('1970-01-01 00:00:00'),
line_dash='dot',
row=0)
[![введите описание изображения здесь][1]][1]
Когда я пытаюсь добавить текст аннотации рядом с vline, я получаю сообщение об ошибке
fig.add_vline(
x=pd.to_datetime('1970-01-01 00:00:00'),
line_dash='dot',
annotation_text='15',
row=0)
Ошибка типа: Сложение/вычитание целых чисел и целых массивов с
Метка времени больше не поддерживается. Вместо сложения/вычитанияn
используйтеn * obj.freq
Комментарии:
1. Похоже, в том, как вы пытаетесь добавить эту аннотацию, нет ничего плохого. Это единственная строка, которую вы изменили, когда получили эту ошибку?
2. @coralvanda Да, я думаю, что проблема была сообщена как ошибка github.com/plotly/plotly.py/issues/3065 . вы знаете какой-либо другой обходной путь
Ответ №1:
- в качестве обходного пути выполните один звонок
add_vline()
и один звонокadd_annotation()
- установите параметры
add_annotation()
таким образом, чтобы аннотация находилась в верхней части строки
import pandas as pd
import plotly.express as px
ROWS = 20
df = pd.DataFrame({"ColA":pd.date_range("1-jan-1970", freq="4H", periods=ROWS), "ColB":np.random.uniform(1,30, ROWS)})
fig = px.line(df, x="ColA", y="ColB")
fig.update_xaxes(title_font=dict(size=12), tickformat='%X')
for time in df["ColA"].values:
time = pd.Timestamp(time).to_pydatetime()
fig.add_vline(x=time)
fig.add_annotation(x=time, y=1, yref="paper", text="15")
fig
под-участки
import pandas as pd
import plotly.express as px
ROWS = 20
df = pd.DataFrame(
{
"ColA": pd.date_range("1-jan-1970", freq="4H", periods=ROWS),
"ColB": np.random.uniform(1, 30, ROWS),
"Facet": np.repeat(["plot 1", "plot 2"], ROWS // 2),
}
)
fig = px.line(df, x="ColA", y="ColB", facet_row="Facet")
fig.update_xaxes(title_font=dict(size=12), tickformat="%X")
for time, y, facet in df[["ColA", "ColB", "Facet"]].values:
time = pd.Timestamp(time).to_pydatetime()
fig.add_vline(x=time, row=0 if facet == "plot 1" else 1)
fig.add_annotation(x=time, y=y, text="15", row=0 if facet == "plot 1" else 1, col=0)
fig
Комментарии:
1. как мне включить аспект, связанный с каждой аннотацией, вы можете увидеть «строку» в моем коде px.line
2. причина, по которой вопрос о наилучшей практике можно воспроизвести, заключается в этой причине. вы видите, что мой ответ можно воспроизвести. обновленный