You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制两个随机变量联合概率的2D热力图

实现步骤

  • 首先计算两个离散随机变量各自的边缘概率:权重除以总权重即可得到对应取值的发生概率
  • 生成联合概率矩阵:两个变量相互独立,联合概率直接等于各自边缘概率的乘积
  • 调用可视化库绘制热力图,手动设置坐标轴范围为0-1即可

完整可运行代码

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 定义x的取值、权重,计算边缘概率
x_values = [0.25, 0.75]
x_weights = [25, 75]
x_probs = [w / sum(x_weights) for w in x_weights]

# 定义y的取值、权重,计算边缘概率
y_values = [0.4, 0.6]
y_weights = [4, 6]
y_probs = [w / sum(y_weights) for w in y_weights]

# 计算联合概率矩阵
joint_prob_matrix = np.array(x_probs).reshape(-1, 1) @ np.array(y_probs).reshape(1, -1)

# 绘制热力图
plt.figure(figsize=(6, 5))
ax = sns.heatmap(
    joint_prob_matrix,
    xticklabels=y_values,
    yticklabels=x_values,
    cmap="viridis",
    annot=True, # 开启色块内显示概率数值
    fmt=".3f"
)

# 设置x、y轴取值范围为0到1
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# 设置图表标注
ax.set_xlabel("Y 取值")
ax.set_ylabel("X 取值")
ax.set_title("X与Y联合概率分布热力图")

plt.show()

补充说明

如果需要得到覆盖0-1整个区间的平滑热力图,可以对离散的联合概率做插值扩展,比如用scipy.interpolate模块将离散点拟合到0-1的网格上再绘制,不过原变量本身只有两组离散取值,默认的离散热力图已经能准确反映联合概率分布情况。

内容的提问来源于stack exchange,提问作者jim mako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:39:04