如何使用 Plotly-Python 绘制水平堆积条形图?
How to plot a horizontal Stacked bar plot using Plotly-Python?
我正在尝试使用 plotly 绘制以下摘要指标图。
数据
Model F1_Score Precision Recall Accuracy ROC_AUC CV_Score
0 LogisticRegression 0.815068 0.777778 0.856115 0.739130 0.678058 0.752876
1 K-NearestNeighbors 0.828767 0.790850 0.870504 0.758454 0.699958 0.714476
2 SVM 0.852459 0.783133 0.935252 0.782609 0.702920 0.665067
3 GaussianProcess 0.825503 0.773585 0.884892 0.748792 0.677740 0.665067
4 MLP 0.774436 0.811024 0.741007 0.710145 0.694033 0.735327
5 DecisionTree 0.747170 0.785714 0.712230 0.676329 0.657586 0.692216
6 ExtraTrees 0.859060 0.805031 0.920863 0.797101 0.732490 0.792698
7 RandomForest 0.826667 0.770186 0.892086 0.748792 0.673984 0.778324
8 XGBoost 0.838488 0.802632 0.877698 0.772947 0.718261 0.764025
9 AdaBoostClassifier 0.800000 0.780822 0.820144 0.724638 0.674778 0.728927
10 GBClassifier 0.835017 0.784810 0.892086 0.763285 0.696043 0.754451
11 CatBoost 0.843854 0.783951 0.913669 0.772947 0.699482 0.768787
12 Stacking 0.833333 0.776398 0.899281 0.758454 0.684934 0.787949
13 Voting 0.836120 0.781250 0.899281 0.763285 0.692287 0.778337
14 Bagging 0.855263 0.787879 0.935252 0.787440 0.710273 0.792673
import plotly.graph_objects as go
mark_color = ['rgba(246, 78, 139, 0.6)', 'rgba(58, 71, 80, 0.6)', 'rgba(50, 171, 96, 0.6)', 'rgba(38, 24, 74, 0.6)', 'rgba(155, 83, 109, 0.6)', 'rgba(297, 55, 74, 0.6)']
line_color = ['rgba(246, 78, 139, 1.0)', 'rgba(58, 71, 80, 1.0)', 'rgba(50, 171, 96, 1.0)', 'rgba(38, 24, 74, 1.0)', 'rgba(155, 83, 109, 1.0)', 'rgba(297, 55, 74, 1.0)']
y_labels = ["F1_Score", "Precision", "Recall", "Accuracy", "ROC_AUC", "CV_Score"]
fig = go.Figure()
for i, j in enumerate(y_labels):
fig.add_trace(go.Bar(
y=y_labels,
x=list(scores[j].values),
name=j,
orientation='h',
marker=dict(
color=mark_color[i]
)
))
fig.update_layout(
barmode='stack',
title="Summary Metrics",
xaxis_title="Metric Value",
yaxis_title="Metric Name",
legend_title="Model",
)
fig.show()
到目前为止,我可以绘制这个
我无法将模型名称添加到绘图中。如何将模型列添加为图例并将所有模型值添加到图中?
- 首先调整数据框
df2 = df.set_index("Model").unstack().to_frame().reset_index()
- 那么这是一个使用 Plotly Express
的简单案例
import pandas as pd
import io
import plotly.express as px
df = pd.read_csv(
io.StringIO(
"""Model F1_Score Precision Recall Accuracy ROC_AUC CV_Score
0 LogisticRegression 0.815068 0.777778 0.856115 0.739130 0.678058 0.752876
1 K-NearestNeighbors 0.828767 0.790850 0.870504 0.758454 0.699958 0.714476
2 SVM 0.852459 0.783133 0.935252 0.782609 0.702920 0.665067
3 GaussianProcess 0.825503 0.773585 0.884892 0.748792 0.677740 0.665067
4 MLP 0.774436 0.811024 0.741007 0.710145 0.694033 0.735327
5 DecisionTree 0.747170 0.785714 0.712230 0.676329 0.657586 0.692216
6 ExtraTrees 0.859060 0.805031 0.920863 0.797101 0.732490 0.792698
7 RandomForest 0.826667 0.770186 0.892086 0.748792 0.673984 0.778324
8 XGBoost 0.838488 0.802632 0.877698 0.772947 0.718261 0.764025
9 AdaBoostClassifier 0.800000 0.780822 0.820144 0.724638 0.674778 0.728927
10 GBClassifier 0.835017 0.784810 0.892086 0.763285 0.696043 0.754451
11 CatBoost 0.843854 0.783951 0.913669 0.772947 0.699482 0.768787
12 Stacking 0.833333 0.776398 0.899281 0.758454 0.684934 0.787949
13 Voting 0.836120 0.781250 0.899281 0.763285 0.692287 0.778337
14 Bagging 0.855263 0.787879 0.935252 0.787440 0.710273 0.792673"""
),
sep="\s+",
)
df2 = df.set_index("Model").unstack().to_frame().reset_index()
fig = px.bar(
df2,
y="level_0",
x=0,
color="Model",
color_discrete_map={
"LogisticRegression": "#2E91E5",
"K-NearestNeighbors": "#E15F99",
"SVM": "#1CA71C",
"GaussianProcess": "#FB0D0D",
"MLP": "#DA16FF",
"DecisionTree": "#222A2A",
"ExtraTrees": "#B68100",
"RandomForest": "#750D86",
"XGBoost": "#EB663B",
"AdaBoostClassifier": "#511CFB",
"GBClassifier": "#00A08B",
"CatBoost": "#FB00D1",
"Stacking": "#FC0080",
"Voting": "#B2828D",
"Bagging": "#6C7C32",
},
)
fig.update_layout(
title="Summary Metrics",
xaxis_title="Metric Value",
yaxis_title="Metric Name",
legend_title="Model",
)
我正在尝试使用 plotly 绘制以下摘要指标图。
数据
Model F1_Score Precision Recall Accuracy ROC_AUC CV_Score
0 LogisticRegression 0.815068 0.777778 0.856115 0.739130 0.678058 0.752876
1 K-NearestNeighbors 0.828767 0.790850 0.870504 0.758454 0.699958 0.714476
2 SVM 0.852459 0.783133 0.935252 0.782609 0.702920 0.665067
3 GaussianProcess 0.825503 0.773585 0.884892 0.748792 0.677740 0.665067
4 MLP 0.774436 0.811024 0.741007 0.710145 0.694033 0.735327
5 DecisionTree 0.747170 0.785714 0.712230 0.676329 0.657586 0.692216
6 ExtraTrees 0.859060 0.805031 0.920863 0.797101 0.732490 0.792698
7 RandomForest 0.826667 0.770186 0.892086 0.748792 0.673984 0.778324
8 XGBoost 0.838488 0.802632 0.877698 0.772947 0.718261 0.764025
9 AdaBoostClassifier 0.800000 0.780822 0.820144 0.724638 0.674778 0.728927
10 GBClassifier 0.835017 0.784810 0.892086 0.763285 0.696043 0.754451
11 CatBoost 0.843854 0.783951 0.913669 0.772947 0.699482 0.768787
12 Stacking 0.833333 0.776398 0.899281 0.758454 0.684934 0.787949
13 Voting 0.836120 0.781250 0.899281 0.763285 0.692287 0.778337
14 Bagging 0.855263 0.787879 0.935252 0.787440 0.710273 0.792673
import plotly.graph_objects as go
mark_color = ['rgba(246, 78, 139, 0.6)', 'rgba(58, 71, 80, 0.6)', 'rgba(50, 171, 96, 0.6)', 'rgba(38, 24, 74, 0.6)', 'rgba(155, 83, 109, 0.6)', 'rgba(297, 55, 74, 0.6)']
line_color = ['rgba(246, 78, 139, 1.0)', 'rgba(58, 71, 80, 1.0)', 'rgba(50, 171, 96, 1.0)', 'rgba(38, 24, 74, 1.0)', 'rgba(155, 83, 109, 1.0)', 'rgba(297, 55, 74, 1.0)']
y_labels = ["F1_Score", "Precision", "Recall", "Accuracy", "ROC_AUC", "CV_Score"]
fig = go.Figure()
for i, j in enumerate(y_labels):
fig.add_trace(go.Bar(
y=y_labels,
x=list(scores[j].values),
name=j,
orientation='h',
marker=dict(
color=mark_color[i]
)
))
fig.update_layout(
barmode='stack',
title="Summary Metrics",
xaxis_title="Metric Value",
yaxis_title="Metric Name",
legend_title="Model",
)
fig.show()
到目前为止,我可以绘制这个
我无法将模型名称添加到绘图中。如何将模型列添加为图例并将所有模型值添加到图中?
- 首先调整数据框
df2 = df.set_index("Model").unstack().to_frame().reset_index()
- 那么这是一个使用 Plotly Express 的简单案例
import pandas as pd
import io
import plotly.express as px
df = pd.read_csv(
io.StringIO(
"""Model F1_Score Precision Recall Accuracy ROC_AUC CV_Score
0 LogisticRegression 0.815068 0.777778 0.856115 0.739130 0.678058 0.752876
1 K-NearestNeighbors 0.828767 0.790850 0.870504 0.758454 0.699958 0.714476
2 SVM 0.852459 0.783133 0.935252 0.782609 0.702920 0.665067
3 GaussianProcess 0.825503 0.773585 0.884892 0.748792 0.677740 0.665067
4 MLP 0.774436 0.811024 0.741007 0.710145 0.694033 0.735327
5 DecisionTree 0.747170 0.785714 0.712230 0.676329 0.657586 0.692216
6 ExtraTrees 0.859060 0.805031 0.920863 0.797101 0.732490 0.792698
7 RandomForest 0.826667 0.770186 0.892086 0.748792 0.673984 0.778324
8 XGBoost 0.838488 0.802632 0.877698 0.772947 0.718261 0.764025
9 AdaBoostClassifier 0.800000 0.780822 0.820144 0.724638 0.674778 0.728927
10 GBClassifier 0.835017 0.784810 0.892086 0.763285 0.696043 0.754451
11 CatBoost 0.843854 0.783951 0.913669 0.772947 0.699482 0.768787
12 Stacking 0.833333 0.776398 0.899281 0.758454 0.684934 0.787949
13 Voting 0.836120 0.781250 0.899281 0.763285 0.692287 0.778337
14 Bagging 0.855263 0.787879 0.935252 0.787440 0.710273 0.792673"""
),
sep="\s+",
)
df2 = df.set_index("Model").unstack().to_frame().reset_index()
fig = px.bar(
df2,
y="level_0",
x=0,
color="Model",
color_discrete_map={
"LogisticRegression": "#2E91E5",
"K-NearestNeighbors": "#E15F99",
"SVM": "#1CA71C",
"GaussianProcess": "#FB0D0D",
"MLP": "#DA16FF",
"DecisionTree": "#222A2A",
"ExtraTrees": "#B68100",
"RandomForest": "#750D86",
"XGBoost": "#EB663B",
"AdaBoostClassifier": "#511CFB",
"GBClassifier": "#00A08B",
"CatBoost": "#FB00D1",
"Stacking": "#FC0080",
"Voting": "#B2828D",
"Bagging": "#6C7C32",
},
)
fig.update_layout(
title="Summary Metrics",
xaxis_title="Metric Value",
yaxis_title="Metric Name",
legend_title="Model",
)