Я реализовал временную шкалу для отображения своих данных. Для создания временной шкалы я использовал:
fig = px.timeline(df
, x_start = "Start"
, x_end = "End"
, y = "Name"
, hover_name = "Task"
, opacity=0.8
, template='plotly_white'
, height=len(df)*35
, width=1150
, color = "Type"
, category_orders=dict(
Name=df["Name"].drop_duplicates().tolist()
)
)
Вы можете видеть, что цвета основаны на «Типе». В моем кадре данных у меня есть два типа данных: релизы и эпики. Цвета выглядят следующим образом:
Проблема здесь в том, что цвета генерируются случайным образом. Однако я хотел бы определить цвета следующим образом:
colors = {'Release':'rgb(255,239,0)', 'Epic':'rgb(148, 76, 228)'}
fig.update(color=colors)
Есть ли способ сделать это?
import pandas as pd
import numpy as np
import plotly.express as px
n = 8
df = pd.DataFrame(
{
"Start": pd.date_range("1-jan-2021", freq = "1M", periods=n),
"End": pd.date_range("1-mar-2021", freq = "1M", periods=n),
"Name": [str(i) for i in range(n)],
"Task": np.random.choice(list("ABCDE"), n),
"Type": np.random.choice(["Epic", "Release"], n),
}
)
fig = px.timeline(
df,
x_start = "Start",
x_end = "End",
y = "Name",
hover_name = "Task",
opacity=0.8,
template = "plotly_white",
# height=len(df) * 35,
# width=1150,
color = "Type",
category_orders=dict(Name=df["Name"].drop_duplicates().tolist()),
color_discrete_map = {"Release": "rgb(255,239,0)", "Epic": "rgb(148, 76, 228)"},
)
fig
Это отлично сработало для меня! Однако мне нужно было определить color_discrete_map category_orders. В противном случае он просто снова назначит цвета случайным образом. Благодарю вас!
Вы пробовали использовать один из
color_*
параметровtimeline
, напримерcolor_discrete_sequence
илиcolor_discrete_map
? plotly.com/python-api-reference/generated/…