如何根据结果足球比赛的数据框创建热图图 python?

how to create heatmap plot python base on dataframe of result football matchs?

我想在 python 中绘制热图。我的代码只绘制 home_score 和 away_score 之间的关系,像这样

f = plt.figure(figsize=(8, 10))
plt.matshow(df_match[['home_score','away_score']].corr(),fignum=f.number)
plt.xticks(range(df_match.select_dtypes(['number']).shape[1]), df_match.select_dtypes(['number']).columns, fontsize=14, rotation=45)
plt.yticks(range(df_match.select_dtypes(['number']).shape[1]), df_match.select_dtypes(['number']).columns, fontsize=14)
cb = plt.colorbar()
cb.ax.tick_params(labelsize=14)
plt.title('Correlation Matrix', fontsize=16);

这是它的输出:

我如何制作一个热图,其中 x 是主队得分,y 是客队得分?

my df like this
home_score  away_score
0   0   0
1   4   2
2   2   1
3   2   2
4   3   0
... ... ...
43080   0   1
43081   1   0
43082   1   2
43083   0   1
43084   0   2

我想要的是这样的:

谢谢!

正在将我的评论转化为答案。您现有的代码使用 plt.matshow 绘制相关性。只要您的数据格式正确,在 plt.matshowseaborn.heatmap 中应该是可行的。问题是,你有可用的数据吗?

如果您想要一个热图,其中 x 轴是主队,y 轴是客队,您的数据框还需要为每一行存储主队和客队。鉴于指定了两支球队,您可以简单地存储两支球队之间的得分差异。下面的示例:

import pandas as pd
df = pd.DataFrame({
    "score": [0, 4, -2, 2, -3, 0, -1, 1, 0, 0, -3, 2],
    "home_team": ["A", "B", "C", "A", "B", "C", "A", "B", "D", "D", "C", "D"],
    "away_team": ["B", "C", "A", "C", "A", "B", "D", "D", "C", "A", "D", "B"]
})

如果您可以按照上述格式存储数据,那么您可以使用df.pivot 重塑数据框:

df2 = df.pivot(index="home_team", columns="away_team")

然后您可以使用 matplotlib 或 seaborn 显示热图:

import matplotlib.pyplot as plt
plt.matshow(df2)
plt.colorbar()
plt.show()

import seaborn as sns
sns.heatmap(df2)
plt.show()