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

如何在Python条形图上叠加中位数标记圆点

在分组条形图的FDLE组添加中位数圆点的解决方案

要在FDLE组的每个条形对应位置添加中位数圆点,核心是找准FDLE组每个条形的x轴坐标——之前用scatter失败大概率是x坐标没匹配到FDLE条形的实际位置。以下是具体实现方案:

关键逻辑说明

  1. 分组条形图的x轴偏移规则:每个类别的多个条形,是通过对原始x坐标加减条形宽度来定位的。比如FDLE作为第一组,它的x坐标通常是原始x - 条形宽度(具体偏移量取决于你代码中的分组顺序)。
  2. 确保medf数组长度与类别数量一致,每个元素对应FDLE组对应类别的中位数。
  3. 用scatter绘制圆点时,设置合适的标记样式、颜色,并通过zorder参数让圆点显示在条形上方。

完整示例代码

import matplotlib.pyplot as plt
import numpy as np

# 替换成你的实际数据
categories = ['类别1', '类别2', '类别3', '类别4']  # x轴类别
fdle_data = [14, 22, 18, 25]                     # FDLE组条形高度
calu3_data = [16, 20, 21, 23]                    # CALU-3组数据
rle6tn_data = [12, 24, 17, 26]                   # RLE-6TN组数据
medf = [15, 21, 19, 24]                          # FDLE组中位数数组

bar_width = 0.25
x = np.arange(len(categories))  # 原始x坐标(每个类别的中心位置)

fig, ax = plt.subplots()
# 绘制三组条形:注意FDLE组的x坐标是x - bar_width
ax.bar(x - bar_width, fdle_data, bar_width, label='FDLE')
ax.bar(x, calu3_data, bar_width, label='CALU-3')
ax.bar(x + bar_width, rle6tn_data, bar_width, label='RLE-6TN')

# 在FDLE组对应位置绘制中位数圆点
ax.scatter(x - bar_width, medf, 
           color='darkred', marker='o', s=60, zorder=10, 
           label='FDLE 中位数')

# 常规图表设置
ax.set_xticks(x)
ax.set_xticklabels(categories)
ax.legend()
plt.ylabel('数值')
plt.title('分组条形图(含FDLE中位数标记)')

plt.show()

常见问题排查

  • 圆点不显示:检查medf的数值是否在y轴范围内,或调高zorder值(数值越大越靠上);
  • 圆点位置偏移:核对FDLE组的x坐标偏移是否和你代码中的一致(比如如果你的FDLE组是用x + bar_width绘制的,scatter的x参数也要对应修改);
  • 维度错误:确保medf的长度和categories的长度完全相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:40:21