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

如何在R的ggplot比例条形图中为条形设置字符串标签

解决R中比例条形图数据类型与标签问题

1. 修正核心问题:数据类型转换

你的.dta数据导入后,sex_work_r被识别为连续型数值,ggplot会按连续轴处理,自然无法显示因子标签。必须先在数据层面将该变量转为因子类型,而非仅在ggplot的映射中临时处理:

# 根据你的实际编码对应标签修改levels和labels,比如假设1="从事性工作",2="不从事性工作"
prep_data$sex_work_r <- factor(prep_data$sex_work_r, 
                               levels = c(1, 2),
                               labels = c("从事性工作", "不从事性工作"))

若不确定原始编码对应的标签,可先执行table(prep_data$sex_work_r)查看数值分布,再匹配对应标签。

2. 绘制带标签的对称比例条形图

修正数据类型后,调整ggplot代码实现添加条形标签、隐藏x轴数值的需求:

proportion_bars <- ggplot(prep_data, aes(x = sex_work_r,
                                         fill = factor(abuse, labels = c("no", "yes")))) +
  geom_bar(position = "fill") +
  # 添加条形内部的百分比标签,position_fill确保标签垂直居中
  geom_text(aes(label = scales::percent(..count../sum(..count..))),
            position = position_fill(vjust = 0.5),
            stat = "count") +
  # 隐藏x轴的数值与刻度
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank()) +
  labs(x = "Sex work", y = "proportion", fill = "Were you ever abused?")

若需要保留x轴的分类标签(仅去掉原始数值),删除axis.text.x = element_blank()即可,此时ggplot会自动显示你为sex_work_r设置的因子标签。

3. 泰坦尼克号数据集的修正方案

你复现问题的代码中存在标签对应错误(Survived的0对应未存活,1对应存活,你原代码标签反转),且冗余的scale_x_discrete设置无必要,修正后代码如下:

# 先修正Survived的因子标签
titanic_train$Survived <- factor(titanic_train$Survived,
                                 levels = c(0,1),
                                 labels = c("no", "yes"))

proportion_bars <- ggplot(titanic_train, aes(x = Sex, fill = Survived)) +
  geom_bar(position = "fill") +
  geom_text(aes(label = scales::percent(..count../sum(..count..))),
            position = position_fill(vjust = 0.5),
            stat = "count") +
  # 若需隐藏x轴的F/M标签,保留下面两行;否则删除
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank()) +
  labs(x = "Sex", y = "proportion survival", fill = "did they survive?")

关键提示

  • 优先在数据层面修正变量类型,避免ggplot对轴类型的判断混乱。
  • scales::percent()可将比例转为百分比格式,提升可读性。
  • position_fill(vjust=0.5)确保标签在条形垂直方向居中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:23:16