修复ggplot饼图标签位置缺失问题并移除左侧x轴标识
解决ggplot饼图的标签问题与多余标识问题
问题1:左侧多余的"x"标识
这是因为ggplot默认保留x轴标题,哪怕x设为""也会显示。只需在theme()里添加axis.title.x = element_blank()就能彻底移除。
问题2:标签位置错误、部分标签缺失
原代码直接用y = Freq_mut定位标签,没有对应饼图切片的中间位置,导致标签错位或被挤出画布。解决核心是计算每个切片的中间累积位置,让标签精准指向切片中心:
- 给数据集新增
mid_y列,计算每个切片的中间点:df$mid_y <- cumsum(df$Freq_mut) - df$Freq_mut/2 - 在
geom_label_repel中用y = mid_y替代原y = Freq_mut,同时调整nudge_x、box.padding等参数优化标签布局,避免重叠遮挡。
修正后的完整代码
# 数据准备 df <- data.frame( Somatic = c("PIK3CA", "TP53", "GATA3", "KMT2C", "PTEN", "NCOR1", "ARID1A", "RUNX1", "NF1", "TBX3", "FOXA1", "ERBB2", "AKT1", "PREX2", "CBFB", "INPPL1", "NSD3", "ESR1", "AXIN2", "RAD51C"), Freq_mut = c(32.6, 32.6, 11.9, 9.3, 5.4, 4.7, 3.8, 3.8, 3.6, 3.1, 2.9, 2.8, 2.5, 2.4, 2.3, 1, 1, 0.8, 0.6, 0.6) ) library(randomcoloR) library(ggplot2) library(ggrepel) # 确保加载ggrepel包,geom_label_repel依赖它 # 生成20种高区分度颜色 colors <- distinctColorPalette(20) # 计算每个饼图切片的中间位置 df$mid_y <- cumsum(df$Freq_mut) - df$Freq_mut/2 ggplot(df, aes(x = "", y = Freq_mut, fill = Somatic)) + geom_bar(width = 1, stat = "identity", color = "black") + coord_polar("y", start = 0) + scale_fill_manual(values = colors) + ggtitle("A") + labs(fill = "Somatic Gene") + theme( panel.background = element_blank(), plot.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title.x = element_blank() # 移除左侧x标识 ) + geom_label_repel( data = df, aes(y = mid_y, label = Somatic), # 使用切片中间位置定位标签 size = 3.5, # 缩小字号避免拥挤 nudge_x = 1.2, # 调整标签与饼图的距离 box.padding = 0.3, # 增加标签内边距 point.padding = 0.5, # 增加标签与数据点的距离 show.legend = FALSE )
内容的提问来源于stack exchange,提问作者WindSur
相关产品推荐
相关产品推荐

