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

修复ggplot饼图标签位置缺失问题并移除左侧x轴标识

解决ggplot饼图的标签问题与多余标识问题

问题1:左侧多余的"x"标识

这是因为ggplot默认保留x轴标题,哪怕x设为""也会显示。只需在theme()里添加axis.title.x = element_blank()就能彻底移除。

问题2:标签位置错误、部分标签缺失

原代码直接用y = Freq_mut定位标签,没有对应饼图切片的中间位置,导致标签错位或被挤出画布。解决核心是计算每个切片的中间累积位置,让标签精准指向切片中心:

  1. 给数据集新增mid_y列,计算每个切片的中间点:df$mid_y <- cumsum(df$Freq_mut) - df$Freq_mut/2
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:20:29