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

如何在分面发散条形图上添加各条形的观测数量文本?

解决方案:在分面发散条形图中显示观测数量

步骤1:补充数据预处理,计算分组观测数量

原预处理未统计各品牌-驱动类型组合的观测数,需先添加分组计数逻辑:

library(tidyverse)

# 读取数据集
EV <- read_csv("evdataset.csv")

# 计算标准化续航值
EV$range_norm <- round((EV$ElectricRange - mean(EV$ElectricRange))/sd(EV$ElectricRange),2)

# 标记续航高于/低于均值
EV$range_type <- ifelse(EV$range_norm > 0, "above", "below") 

# 按品牌、驱动类型分组统计观测数量,同时保留排序逻辑
EV_count <- EV %>%
  group_by(Make, Drive, range_type, range_norm) %>%
  summarise(count = n(), .groups = "drop") %>%
  arrange(range_norm)

# 将品牌转为有序因子,维持基于range_norm的排序
EV_count$Make <- factor(EV_count$Make, levels = unique(EV_count$Make))

步骤2:修改绘图代码,替换标签为观测数量

将label参数替换为统计得到的count,并通过hjust调整文本位置,避免被条形遮挡:

ggplot(EV_count, aes(x = Make, y = range_norm, label = count)) +
  geom_bar(stat = 'identity', aes(fill = range_type)) +
  # 根据续航正负调整文本位置:正数值放条形右侧,负数值放左侧
  geom_text(aes(hjust = ifelse(range_norm > 0, -0.1, 1.1)), size = 3.5) +
  facet_wrap(vars(as.factor(Drive))) +
  coord_flip() +
  labs(x = "品牌", y = "标准化续航", fill = "续航水平") +
  theme_bw()

关键注意点

  • 必须按Make+Drive分组计数:原数据单品牌下可能对应多个车型(多行数据),需聚合后才能得到每个条形对应的观测数量
  • 文本位置调整:通过hjust参数让文本显示在条形外侧,避免被条形本身遮挡
  • 保留原排序逻辑:维持品牌基于range_norm的排序规则,保证图表结构和需求一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:20:31