python - 如何用不同的数据填充热图的方块来确定方块的“热度”?
问题描述
鉴于下面的热图,我将如何将构成正方形“热”的数据点的计数作为文本添加到每个正方形?
df = pd.DataFrame(
{
'pred_1_bin': {79: 0.1, 78: 0.1, 77: 0.1, 76: 0.2, 75: 0.2, 74: 0.2, 73: 0.3, 72: 0.3, 71: 0.3},
'pred_2_bin': {79: 0.1, 78: 0.2, 77: 0.3, 76: 0.1, 75: 0.2, 74: 0.3, 73: 0.1, 72: 0.2, 71: 0.3},
'investment': {79: 1.0, 78: 1.0, 77: 1.0, 76: 1.0, 75: 1.0, 74: 1.0, 73: 1.0, 72: 1.0, 71: 1.0},
'profit_loss': {79: -1.0, 78: -0.2, 77: 2.0, 76: 0.5, 75: 0.7, 74: -1.0, 73: 1.4, 72: 0.6, 71: 0.0},
}
)
agg_dict = {"investment": "sum", "profit_loss": "sum"}
df = df.groupby(["pred_1_bin", "pred_2_bin"]).agg(agg_dict)
df["roi"] = df["profit_loss"] / df["investment"]
df.reset_index(inplace=True)
df = pd.pivot_table(df, values='roi', index=['pred_1_bin'], columns=['pred_2_bin'], aggfunc=np.mean, fill_value=0)
ax = sns.heatmap(df, cmap="Blues")
ax.invert_yaxis()
plt.show()
我知道我可以通过使用来显示正方形的热值,annot=True
但我正在寻找数据点的计数。
解决方案
尝试提取roi
和count
when groupby
。然后您可以手动将计数插入到图中:
agg_dict = {"investment": ('investment', "sum"),
"profit_loss": ('profit_loss',"sum"),
"count" : ("investment", 'count')}
df = df.groupby(["pred_1_bin", "pred_2_bin"]).agg(**agg_dict)
df["roi"] = df["profit_loss"] / df["investment"]
# roi and count
roi_data = df['roi'].unstack()
count_data = df['count'].unstack()
# plot
ax = sns.heatmap(roi_data, cmap="Blues")
# annotate
for i, x in enumerate(ax.get_xticks()):
for j,y in enumerate(ax.get_yticks()):
val = count_data.iloc[j,i]
ax.text(x,y, f"{val}")
输出:
推荐阅读
- javascript - 发送一些 put 方法后,我的 json 文件变为空
- c# - 如何从外部应用程序(在我的情况下为资源管理器)查找和关闭窗口或在 C# 中从应用程序外部关闭窗口时触发事件
- python - 如何从@gamee 电报机器人发送游戏并跟踪记录和分数
- service - 在定义的间隔内获取两个指标之间的百分比 [Prometheus]
- html - 内联 CSS 背景图像未显示
- c# - WPF 在文本中显示会话用户名
- react-native - 如何使用 expo-location 从用户当前位置检索用户所在的城市?
- c# - 尝试在 UWP 上加密 SQLite 数据库时出现问题
- python-3.x - Python - 带有 plotly express 的 Voronoi 2D
- c# - 此版本的 Visual Studio 无法打开以下项目