我正在尝试使用plotly express绘制直方图。我有一个数据框,其值如下所示:
env type status success count
0 PROD ABC 403 False 21
1 IMPL HTTP 200 True 64037
2 IMPL HTTP 304 False 9
3 PROD ABC 503 False 1
4 IMPL ABC 200 True 3308
5 PROD HTTP 204 True 54
6 IMPL ABC 500 False 1000
7 PROD ABC 500 False 100
.... ..... ....
我想根据各种分组(env,类型)绘制多个图表(直方图或饼图),以显示每个分组中错误代码的总数。我正在尝试类似的东西:
fig = px.pie(df.groupby("success").get_group(False), title="Overall Failure Count", names="status", values = "count", color='status')
fig.show()
for env, df_env in df.groupby("env"):
fig = px.pie(df_env.groupby("success").get_group(False), title="Failure Count for %s"%env,
names="status", values = "count", color='status')
fig.show()
这样,状态的颜色即刻生成,并且在图表之间相同的状态是不同的。我希望为所有图表生成颜色,以便它们在不同图表之间保持一致。
例如:状态码200的颜色在所有图表中均为红色
我尝试使用dict()将状态映射到颜色:
def colors(n):
color_list = list()
for i in range(n):
random_number = random.randint(0,16777215)
hex_number = str(hex(random_number))
hex_number ='#'+ hex_number[2:]
color_list.append(hex_number)
return color_list
statuses = list(df.status.unique())
colors_list = colors(len(statuses))
colorMap = dict(zip(statuses, colors_list))
fig = px.pie(df.groupby("success").get_group(False), title="Overall Failure Count", names="status", values = "count", color=df['status'].apply(lambda x : colorMap[x]))
但出现以下错误:
All arguments should have the same length. The length of argument `color` is 14, whereas the length of previous arguments ['status', 'count'] is 24
[我还尝试了其他各种操作,例如创建一列df ['color],其颜色的十六进制值与状态相对应。但这也不起作用。
有人可以告诉我我想念的东西以及如何使它工作吗?
您将对所有绘图使用相同的color_discrete_map
选项,请参见Using an explicit mapping for discrete colors。像这样的东西:
fig = px.pie(df.groupby("success").get_group(False),
title="Overall Failure Count",
names="status",
values="count",
color='status',
color_discrete_map={200:'red',
403:'blue',
304:'green',
503:'yellow',
204:'grey',
500:'cyan'
}
)