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

如何在ggplot条形图右侧坐标轴添加自定义文本标签

实现方法

你可以通过添加geom_text()图层完成标签添加需求,由于同一carb分组下的carb_labelright取值完全一致,需要先对标签去重避免重复渲染,修改后的完整代码如下:

library(ggplot2)
library(dplyr) # 用于distinct函数实现标签去重

mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)

ggplot(mtcars, 
       aes(fill=gear, 
           y=wt, 
           x=carb)) +
  geom_bar(position="fill", stat="identity",width=.8)+
  # 新增文本标签图层
  geom_text(data = distinct(mtcars, carb, carb_labelright),
            aes(x = carb, y = 1.02, label = carb_labelright),
            hjust = 0, inherit.aes = FALSE)+
  coord_flip()+
  theme(axis.text.x = element_text(angle=90),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

参数说明

  • data = distinct(mtcars, carb, carb_labelright):提取carb和对应标签的唯一值组合,避免同一分组重复打印多次标签
  • y = 1.02:由于position="fill"参数会将y轴范围归一化到0~1,设置y为略大于1的数值即可让标签显示在条形右侧,数值越大标签离条形越远
  • hjust = 0:设置文本左对齐,让标签左侧贴近条形边缘
  • inherit.aes = FALSE:避免继承全局ggplot的fill等映射参数,防止报错

如果你不想额外加载dplyr包,可以将geom_text的data参数替换为data = unique(mtcars[,c("carb","carb_labelright")]),效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:09