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

如何在R语言ggplot环形直方图内添加品牌分组标识

嘿,我来帮你实现环形直方图内部添加品牌名称的需求!其实只需要在现有代码基础上再添加一层geom_text,专门用来绘制内部的品牌标签,同时调整好位置和对齐方式就可以了。

完整修改后的代码

# 样本数据构建
brand=c('MS', 'Google', 'Apple', 'MS', 'FB', 'Apple', 'Oracle')
product=c('OS', 'Search', 'Iphone', 'Search', 'Network', 'OS', 'DB')
noOfProduct = c(10,23,84,120,38,1,90)
id = c(1,2,3,4,5,6,7)
brandData <- data.frame(id, brand,product, noOfProduct)

# 环形直方图代码(添加内部brand标签)
library(ggplot2)
label_data=brandData
number_of_bar=nrow(label_data)
angle= 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust<-ifelse( angle < -90, 1, 0)
label_data$angle<-ifelse(angle < -90, angle+180, angle)

ggplot(brandData, aes(x=as.factor(id), y=noOfProduct, fill=brand)) + 
  geom_bar(stat="identity", alpha=0.5) + 
  # 保持y轴范围,留出足够空间放内部标签
  ylim(-100, 200) + 
  theme_minimal() + 
  theme( axis.text = element_blank(), axis.title = element_blank(), 
         panel.grid = element_blank(), plot.margin = unit(rep(-1,4), "cm") ) + 
  coord_polar() + 
  # 外部的product标签(原有代码)
  geom_text(data=label_data, aes(x=id, y=noOfProduct, label=product, hjust=hjust), 
            color="black", fontface="bold",alpha=0.6, size=2.5, angle= label_data$angle, 
            inherit.aes = FALSE ) +
  # 新增:内部的brand标签
  geom_text(data=label_data, aes(x=id, y=-50, label=brand, hjust=hjust), 
            color="darkgray", fontface="italic", size=2.5, angle= label_data$angle, 
            inherit.aes = FALSE )

关键改动说明

  • 新增了一层geom_text,将y参数设为-50(这个值在ylim(-100,200)的负区间内,刚好落在环形内部),用来放置品牌名称。
  • 复用了之前计算好的angle和hjust参数,确保品牌标签的旋转和对齐方式和产品标签保持一致,避免出现文字颠倒的问题。
  • 给品牌标签设置了不同的样式(比如darkgray颜色、italic斜体),和外部的产品标签做区分,提升可读性。

这样修改后,你的环形直方图就会在每个条形的内部显示对应的品牌名称,外部显示产品名称,整体图表的自解释性会大大提升!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:16