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

如何在DataFrame的正态分布图中用索引或列值标注数据点

为DataFrame绘制的正态分布图标注特定数据点的对应列值

实现步骤与代码示例

首先导入所需工具库:

import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import norm
import numpy as np

创建示例DataFrame:

df = pd.DataFrame({'col1': ['A', 'B', 'C'], 'col2': [3, 7, 9]})

接下来完成绘图与标注:

# 提取目标列数据
data = df['col2']

# 绘制数据直方图(可选,用于直观展示数据分布)
plt.hist(data, bins=5, density=True, alpha=0.6, color='g', label='数据直方图')

# 拟合并绘制正态分布曲线
mu, std = norm.fit(data)
x_range = np.linspace(plt.xlim()[0], plt.xlim()[1], 100)
norm_curve = norm.pdf(x_range, mu, std)
plt.plot(x_range, norm_curve, 'k', linewidth=2, label=f'拟合正态分布 ($\mu={mu:.2f}$, $\sigma={std:.2f}$)')

# 绘制原始数据点,方便定位标注位置
plt.scatter(data, [0]*len(data), color='red', zorder=5, label='原始数据点')

# 标注指定数据点的col1值:以col2=7为例
target = df[df['col2'] == 7].iloc[0]
# 使用annotate添加带箭头的标注,xytext可调整标注位置避免遮挡
plt.annotate(target['col1'],
             xy=(target['col2'], 0),
             xytext=(target['col2'] + 0.3, 0.06),
             arrowprops=dict(facecolor='black', shrink=0.05))

# 配置图表基础元素
plt.xlabel('col2 数值')
plt.ylabel('概率密度')
plt.title('col2 数据正态分布与特定点标注')
plt.legend()

plt.show()

灵活调整说明

  • 若无需直方图,直接删除plt.hist()相关代码即可,保留正态曲线和数据点。
  • 如需标注多个点,可遍历目标行列表,循环调用plt.annotate():
    # 示例:标注col2为7和9的点
    target_cols = [7,9]
    for val in target_cols:
        row = df[df['col2'] == val].iloc[0]
        plt.annotate(row['col1'], xy=(row['col2'], 0), xytext=(row['col2']+0.3, 0.06),
                     arrowprops=dict(facecolor='black', shrink=0.05))
    
  • 若要标注数据索引,将row['col1']替换为row.name即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:09:25