根据其他行的索引更改行颜色
Posted
技术标签:
【中文标题】根据其他行的索引更改行颜色【英文标题】:Changing line color based on other line's index 【发布时间】:2022-01-02 17:57:00 【问题描述】:我有一个包含两列 Actual_Values
和 Predicted_Values
的 out
数据框。
我正在尝试创建图表:
import pandas as pd
import plotly.graph_objects as go
x_data = out.index
trace1 = go.Scatter(
x=x_data,
y=out['Actual_Values'],
name="Actual Values"
)
trace2 = go.Scatter(
x=x_data,
y=out['Predicted_Values'],
name="Predictions"
)
traces = [trace1, trace2]
layout = go.Layout(
xaxis=dict(
autorange=True
),
yaxis=dict(
autorange=True
)
)
fig = go.Figure(data=traces, layout=layout)
plot(fig, include_plotlyjs=True)
给出:
但是,我需要一个图表,其中蓝线从红线开始变为其他颜色。
【问题讨论】:
请分享您的数据样本。换句话说,您应该提供minimal reproducible example。 【参考方案1】:这对你有帮助吗?
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# Data
n = 150
n_pred = 10
df1 = pd.DataFrame(
"x": np.arange(n),
"actual_value": np.random.randint(0, 100, n))
df2 = pd.DataFrame(
"x": np.arange(n-n_pred, n),
"predicted_value": np.random.randint(0, 100, n_pred))
# You need Outer join when prediction range is
# larger than actual value one.
df = pd.merge(df1, df2, on="x", how="outer")
idx_min = df[df["predicted_value"].notnull()].index[0]
# Plot
trace1 = go.Scatter(
x=df["x"][:idx_min+1],
y=df['actual_value'][:idx_min+1],
name="Actual Values",
line=dict(color="blue")
)
trace2 = go.Scatter(
x=df["x"][idx_min:],
y=df['actual_value'][idx_min:],
name="Actual Values",
mode="lines",
line=dict(color="green"),
showlegend=False
)
trace3 = go.Scatter(
x=df["x"],
y=df['predicted_value'],
name="Predicted Values",
line=dict(color="red")
)
traces = [trace1, trace2, trace3]
layout = go.Layout(
xaxis=dict(
autorange=True
),
yaxis=dict(
autorange=True
)
)
fig = go.Figure(data=traces, layout=layout)
fig.show()
【讨论】:
以上是关于根据其他行的索引更改行颜色的主要内容,如果未能解决你的问题,请参考以下文章