geom_bar+coord_polar绘图:添加标签与去除刻度问题求助
ggplot极坐标同心圆:标签添加与刻度线去除解决方案
问题描述
我尝试给用ggplot制作的同心圆(极坐标条形图)添加数据框C列的标签,用geom_text_repel未能成功;同时无法去除左上角的刻度线。当前代码如下:
df <- data.frame(C=c(rep("The macro-environment",4),rep("The industry",4),rep("Competitors",4),rep("The organisation",4))) ggplot(df, aes(factor(1), fill = C)) + geom_bar(width = 1, colour = NA, show.legend = FALSE, alpha = .8) + coord_polar() + labs( x = "", y = "" ) + scale_fill_manual(values = c("#289045", "#beddc7", "#d4dfe9", "#286291")) + theme(axis.ticks.x = element_blank(), axis.ticks.y = element_blank()) + theme_minimal()
当前图表为四层同心圆,但无对应分类标签,且左上角残留刻度线。
解决步骤
1. 彻底去除刻度线
原代码中theme_minimal()会覆盖之前设置的axis.ticks.x/y = element_blank(),需将自定义theme设置放在theme_minimal()之后,确保生效:
theme_minimal() + theme( axis.ticks = element_blank(), # 移除所有刻度线 axis.text.x = element_blank(), # 可选:移除x轴文字 axis.text.y = element_blank() # 可选:移除y轴文字 )
2. 添加分类标签
直接用原始数据会重复绘制标签,需先汇总每个分类的位置,再用geom_text_repel添加:
library(ggplot2) library(ggrepel) library(dplyr) # 处理数据:计算每个分类的中心位置 df_summary <- df %>% group_by(C) %>% summarise(count = n()) %>% mutate(y_pos = cumsum(count) - count/2) # 绘图并添加标签 ggplot(df, aes(factor(1), fill = C)) + geom_bar(width = 1, colour = NA, show.legend = FALSE, alpha = .8) + geom_text_repel(data = df_summary, aes(x = factor(1), y = y_pos, label = C), nudge_x = 0.5, # 控制标签向外偏移的距离 size = 4) + coord_polar() + labs(x = "", y = "") + scale_fill_manual(values = c("#289045", "#beddc7", "#d4dfe9", "#286291")) + theme_minimal() + theme( axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank() )
说明
- 标签定位:通过
cumsum(count) - count/2计算每个同心圆的中心位置,确保标签居中显示。 nudge_x参数可根据图表大小调整,避免标签与图形重叠。
内容的提问来源于stack exchange,提问作者Display name
相关产品推荐
相关产品推荐

