python matplotlib pyplot plt.axhline()函数(绘制平行于x轴的水平参考线)

该博客介绍了如何使用matplotlib的axhline函数绘制水平参考线,并通过Python的torch库进行骰子投掷模拟。通过多次投掷,展示了估计概率如何随着时间推移接近真实概率。此外,还展示了如何利用累积频率绘制概率估计的收敛过程。

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

函数功能:绘制平行于x轴的水平参考线

调用签名:plt.axhline(y=0.0, c="r", ls="--", lw=2)

y:水平参考线的出发点

c:参考线的线条颜色

ls:参考线的线条风格

lw:参考线的线条宽度

平移性:上面的函数,同样适用于axvline()函数

示例:

d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
import torch
from torch.distributions import multinomial
from d2l import torch as d2l

# 为了抽取⼀个样本,我们只需传⼊⼀个概率向量。输出是另⼀个相同⻓度的向量:它在索引i处的值是采样结果中i出现的次数。
fair_probs = torch.ones([6]) / 6
# print(fair_probs)   # tensor([0.1667, 0.1667, 0.1667, 0.1667, 0.1667, 0.1667])
print(multinomial.Multinomial(1, fair_probs).sample())  # tensor([0., 0., 1., 0., 0., 0.])

# 如果你运⾏采样器很多次,你会发现每次你都得到随机的值。在估计⼀个骰⼦的公平性时,我们经常希望从
# 同⼀分布中⽣成多个样本。如果⽤Python的for循环来完成这个任务,速度会慢得令⼈难以忍受,因此我们使
# ⽤的函数⽀持同时抽取多个样本,返回我们想要的任意形状的独⽴样本数组。
print(multinomial.Multinomial(10, fair_probs).sample())  # tensor([1., 2., 1., 2., 2., 2.])

# 现在我们知道如何对骰⼦进⾏采样,我们可以模拟1000次投掷。然后,我们可以统计1000次投掷后, 每个数字
# 被投中了多少次。具体来说,我们计算相对频率作为真实概率的估计。
# 将结果存储为32位浮点数以进⾏除法
counts = multinomial.Multinomial(1000, fair_probs).sample()
counts = counts / 1000  # 相对频率作为估计值
print(counts)  # tensor([0.1530, 0.1700, 0.1620, 0.1600, 0.1770, 0.1780])
# 因为我们是从⼀个公平的骰⼦中⽣成的数据,我们知道每个结果都有真实的概率1/6,⼤约是0.167,所以上⾯
# 输出的估计值看起来不错。

# 我们也可以看到这些概率如何随着时间的推移收敛到真实概率。让我们进⾏500组实验,每组抽取10个样本
counts = multinomial.Multinomial(10, fair_probs).sample((500,))
print(counts.shape)  # torch.Size([500, 6])
cum_counts = counts.cumsum(dim=0)   # 沿指定轴逐级累加

estimates = cum_counts / cum_counts.sum(dim=1, keepdims=True)   # 获得概率

# 绘图
d2l.set_figsize((6, 4.5))
for i in range(6):
    # d2l.plt.plot(estimates[:, i].numpy(), label=("P(die=" + str(i + 1) + ")"))
    d2l.plt.plot(estimates[:, i], label=("P(die=" + str(i + 1) + ")"))  # 转不转换成numpy数组都行
d2l.plt.axhline(y=0.167, color='black', linestyle='dashed')
d2l.plt.gca().set_xlabel('Groups of experiments')
d2l.plt.gca().set_ylabel('Estimated probability')
d2l.plt.legend()
d2l.plt.show()


运行结果:
在这里插入图片描述
参考文章:python可视化—axhline()函数

### 使用 PythonMatplotlib 绘制带平均值参考线的图表 以下是一个完整的示例代码,用于创建一个柱状图并添加一条表示数据均值的水平参考线: ```python import matplotlib.pyplot as plt import numpy as np # 数据准备 x = np.arange(10) # X 数据 y = np.random.rand(10) * 10 # Y 随机数据 # 计算平均值 mean_y = np.mean(y) # 创建绘图对象 fig, ax = plt.subplots() # 绘制柱状图 bars = ax.bar(x, y, color='skyblue', edgecolor='black') # 添加平均值参考线 ax.axhline(mean_y, color='red', linestyle='--', linewidth=2, label=f'Mean ({mean_y:.2f})') # 设置标题和坐标标签 ax.set_title('Bar Chart with Mean Reference Line') ax.set_xlabel('Categories') ax.set_ylabel('Values') # 添加图例 ax.legend() # 显示图形 plt.show() ``` #### 解析 上述代码实现了以下几个功能: - **数据生成**:通过 `np.random.rand` 方法生成一组随机数据作为柱状图的高度[^1]。 - **计算平均值**:利用 NumPy 的 `np.mean` 函数计算给定数组的平均值[^2]。 - **绘制柱状图**:调用 `ax.bar` 方法绘制柱形图,并设置颜色和边框样式[^3]。 - **添加参考线**:使用 `ax.axhline` 方法在指定高度处绘制一条水平虚线,代表数据的平均值[^4]。 - **美化图表**:设置了标题、坐标标签以及图例来增强可读性[^5]。 #### 输出效果描述 运行此代码后会显示一张柱状图,其中每根柱子对应于输入数据的一个值。此外,在整个图表上还会有一条红色虚线标记出这些数值的平均位置,并附有对应的标注说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dontla

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值