python绘制二维直方图

本文介绍了如何使用Python的matplotlib库结合hist和scatter方法展示二维数据分布,以及hist2d函数的便捷用法。通过生成二元高斯分布的数据,分别展示了直方图与散点图的组合以及hist2d的直方图图像形式,帮助理解数据的分布特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

hist+scatter

有关hist的内容,可以看这篇:Python绘制直方图

如果想描述二维数据的分布特征,那么一个直方图显然是不够用的,为此可使用两个直方图分别代表x和y方向上的分布情况,同时透过散点图查看其整体的分布特征。

下面创建一组二元高斯分布的数据,用于直方图测试。多元高斯分布的主要参数仍为期望和方差,但所谓多元分布,在坐标层面的表现就是坐标轴的个数,也就是向量维度。所以N个元素对应N维向量,也就有N个期望;而方差则进化为了协方差矩阵

import numpy as np
import matplotlib.pyplot as plt

mean = [0, 0]
cov = [[0, 1], [10, 0]]
x, y = np.random.multivariate_normal(mean, cov, 5000).T

其中,x,y就是待统计的数据。

fig = plt.figure()
gs = fig.add_gridspec(2, 2,  
    width_ratios=(4, 1),  
    height_ratios=(1, 4))

ax = fig.add_subplot(gs[1, 0])
ax.scatter(x, y, marker='x')        # 散点图绘制

xHist = fig.add_subplot(gs[0, 0], sharex=ax)
xHist.tick_params(axis="x", labelbottom=False)

yHist = fig.add_subplot(gs[1, 1], sharey=ax)
yHist.tick_params(axis="y", labelleft=False)

binwidth = 0.25
lim = (int(np.max(np.abs([x,y]))/0.25) + 1) * 0.25
bins = np.arange(-lim, lim + binwidth, binwidth)
xHist.hist(x, bins=bins)
yHist.hist(y, bins=bins, orientation='horizontal')

plt.show()

其中,tick_params用于取消直方图左侧和下面的坐标刻度,效果如下

在这里插入图片描述

hist2d

相比之下,hist2d可以更加便捷地绘制直方图,并以图像的形式反馈回来

plt.hist2d(x,y,bins=40)
plt.show()

其中,x,y即x和y轴分别要统计的样本值,bins和hist中的参数相同,表示数据条个数,只不过对应到图像中,数据条变成了数据块,效果如图所示

在这里插入图片描述

当然,也可以把hist+scatter图中的散点图代之以hist2d

fig = plt.figure()
gs = fig.add_gridspec(2, 2,  
    width_ratios=(4, 1),  
    height_ratios=(1, 4))

ax = fig.add_subplot(gs[1, 0])
ax.hist2d(x, y, bins=40)        # 散点图绘制

xHist = fig.add_subplot(gs[0, 0], sharex=ax)
xHist.tick_params(axis="x", labelbottom=False)

yHist = fig.add_subplot(gs[1, 1], sharey=ax)
yHist.tick_params(axis="y", labelleft=False)

binwidth = 0.25
lim = (int(np.max(np.abs([x,y]))/0.25) + 1) * 0.25
bins = np.arange(-lim, lim + binwidth, binwidth)
xHist.hist(x, bins=bins)
yHist.hist(y, bins=bins, orientation='horizontal')

plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值