方法一
·不使用子图对象如何给形图中的每个条形设置数据
plt.figure(figsize=(8, 4))
sns.countplot(x='Workout_Frequency (days/week)', data=df)
plt.title('会员每周锻炼频率分布')
plt.xlabel('锻炼频率 (每周次数)')
plt.ylabel('人数')
# 获取当前活动的轴对象
ax = plt.gca()
# 循环遍历条形图中的每个条形(patch)
for p in ax.patches:
# 使用 annotate 方法在每个条形上方标注频数
ax.annotate(f'{p.get_height()}', (p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center', fontsize=10, color='green', xytext=(0, 5),
textcoords='offset points')
方法二
import matplotlib.pyplot as plt
import seaborn as sns
# 创建一个画布,并设置大小
plt.figure(figsize=(10, 8))
# 创建一个子图对象 ax5
ax5 = plt.subplot(111) # 这里使用 1x1 网格的第一个位置
# 绘制条形图
sns.countplot(x='Workout_Frequency (days/week)', data=df)
# 设置标题和轴标签
plt.title('会员每周锻炼频率分布')
ax5.set_xlabel('锻炼频率 (每周次数)')
ax5.set_ylabel('人数')
# 循环遍历条形图中的每个条形(patch)
for p in ax5.patches:
# 使用 annotate 方法在每个条形上方标注频数
ax5.annotate(f'{p.get_height()}', (p.get_x() + p.get_width() / 2., p.get_height()),
ha='center', va='center', fontsize=11, color='green', xytext=(0, 5),
textcoords='offset points')
# 显示图表
plt.show()
-
代码解读
循环标注频数: -
for p in ax5.patches: 循环遍历条形图中的每个条形(patch)。
-
ax5.annotate(f’{p.get_height()}', (p.get_x() + p.get_width() / 2., p.get_height()), …):
- 使用
annotate
方法在每个条形上方标注频数。 - f’{p.get_height()}’ 是要标注的文本,即条形的高度。
- (p.get_x() + p.get_width() / 2., p.get_height()) 是标注的位置,位于条形的中心上方。
- ha=‘center’, va=‘center’ 设置水平和垂直对齐方式。
- fontsize=11 设置字体大小。
- color=‘black’ 设置字体颜色。
- xytext=(0, 5) 设置文本偏移量,使标注稍微向上偏移,避免与条形顶部重叠。
- textcoords=‘offset points’ 指定偏移量的坐标系统。
- 使用