[英]Map linetype to data in plotly figure with multiple subplots in python
我正在嘗試將線型映射到帶有多個子圖的plotly
圖中的pandas
數據plotly
的分類數據列。
我有一個數據框df
相當於:
from datetime import datetime
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['today'] = df.date.apply(lambda date: 'the_future' if date > datetime.today() else 'the_past')
我需要繪制多行( y_one
, y_two
以上) date_range
。 我想讓過去的線條是實線,未來是虛線,即將線型映射到df['today']
。
到目前為止我實現的情節代碼是:
import plotly.graph_objects as go
from plotly.offline import plot
fig = go.Figure()
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["y_one"],
mode="lines",
line=dict(color='black',
)
)
)
fig.add_trace(
go.Scatter(
x=df["date"],
y=df["y_two"],
mode="lines",
line=dict(color='red'),
)
)
plot(fig)
是否有實現這個用例的方式plotly
多的次要情節?
可能不是最優雅的解決方案,但如果您有大量要繪制的列,您最終可以使用循環工作,您可以考慮使用循環。
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.