如何在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
相关产品推荐
相关产品推荐

