Возможно, это не самое элегантное решение, но в конечном итоге вы можете работать с циклами, если у вас есть большое количество столбцов для печати, которые вы можете использовать al oop.
import plotly.graph_objects as go
import pandas as pd
import numpy as np
df = pd.DataFrame({'date':pd.date_range(start='01/01/2020',periods=100),
'y_one':np.linspace(1,100,100),
'y_two':np.linspace(100,1,100)})
df["is_future"] = df["date"]>pd.datetime.today()
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=df[df["is_future"]==False]["date"],
y=df[df["is_future"]==False]["y_one"],
mode="lines",
legendgroup="y_one",
name = "y_one",
line=dict(color='black',)))
fig.add_trace(
go.Scatter(
x=df[df["is_future"]==True]["date"],
y=df[df["is_future"]==True]["y_one"],
mode="lines",
legendgroup="y_one",
name = "y_one",
showlegend=False,
line=dict(color='black',dash='dash')))
fig.add_trace(
go.Scatter(
x=df[df["is_future"]==False]["date"],
y=df[df["is_future"]==False]["y_two"],
mode="lines",
legendgroup="y_two",
name = "y_two",
line=dict(color='red'),))
fig.add_trace(
go.Scatter(
x=df[df["is_future"]==True]["date"],
y=df[df["is_future"]==True]["y_two"],
mode="lines",
legendgroup="y_two",
name = "y_two",
showlegend=False,
line=dict(color='red', dash='dash'),))
fig.show()