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

如何在ggplot2中完整显示所有X轴标签?

解决ggplot2中X轴标签无法完整显示的问题

问题说明

使用以下数据集和ggplot2代码绘图时,X轴的12个标签(Die 1、Pro 1等)因空间不足被截断,无法完整展示。

数据集

cc<-structure(list(Cycle = c("Average", "Average", "Average", "Average", 
"Average", "Average", "Average", "Average", "Average", "Average", 
"Average", "Average"), name = structure(1:12, levels = c("Die 1", 
"Pro 1", "Est 1", "Met 1", "Die 2", "Pro 2", "Est 2", "Met 2", 
"Die 3", "Pro 3", "Est 3", "Met 3"), class = "factor"), value = c(100, 
101, 97, 99, 100, 101.788432267884, 97.2, 99.6194824961948, 100, 
102, 97.5, 99), min = c(98.3337514142342, 99.3337514142342, 95.3337514142342, 
97.3337514142342, 98.3337514142342, 100.122183682119, 95.5337514142342, 
97.953233910429, 98.3337514142342, 100.333751414234, 95.8337514142342, 
97.3337514142342), max = c(101.666248585766, 102.666248585766, 
98.6662485857658, 100.666248585766, 101.666248585766, 103.45468085365, 
98.8662485857658, 101.285731081961, 101.666248585766, 103.666248585766, 
99.1662485857658, 100.666248585766)), row.names = c(NA, -12L), class = c("tbl_df", 
"tbl", "data.frame"))

原绘图代码

cc%>%ggplot(aes(name, value)) +
  geom_blank() +
  geom_line(aes(group = 1), linewidth = 1.5) +
  geom_point(size = 3, shape = 15) +
  geom_errorbar(aes(ymin = min, ymax = max ), width = 0.05, size = 0.4) +
  scale_y_continuous('% Weight relative to die', limits = c(92, 104), breaks = seq(96, 109, by = 4)) +
  labs(title = 'Weighted across EC-3 cycles', x = 'Phase') +
  coord_cartesian(expand = FALSE) +
  theme_classic(base_size = 16) +
  theme(panel.background = element_rect(fill = "grey90"),
        panel.grid.major = element_line(color = "white"),
        panel.grid.minor = element_blank(),
        axis.line = element_line(color = "black"),
        axis.text = element_text(color = "black"),
        axis.ticks = element_line(color = "black"),
        axis.title = element_text(face = "bold"),
        legend.position = "right",
        plot.title = element_text(face = 'bold', hjust = 0.5),
        plot.title.position = 'plot'
  ) 

解决方案

针对X轴标签截断的问题,提供几种实用解决方法:

方法1:旋转X轴标签并调整对齐

在theme中添加参数,将标签旋转45度并右对齐,避免重叠:

axis.text.x = element_text(angle = 45, hjust = 1)

方法2:缩小X轴标签字体

适当减小标签字号,为更多标签腾出空间:

axis.text.x = element_text(size = 14) # 可根据需求调整大小

方法3:增加图表底部边距

通过plot.margin增加底部边距,给标签留出足够显示空间:

plot.margin = margin(b = 30) # 单位为pt,可按需调整

方法4:按组拆分绘图(贴合数据结构)

观察数据可知标签分为3组(1、2、3),每组含4个阶段。可拆分数据后用分面展示,每组单独显示标签:

library(dplyr)
library(stringr)
# 拆分标签为阶段和分组
cc <- cc %>%
  mutate(phase = str_extract(name, "^[A-Za-z]+"),
         group = str_extract(name, "\\d+$"))

# 分面绘图
cc%>%ggplot(aes(phase, value)) +
  geom_blank() +
  geom_line(aes(group = 1), linewidth = 1.5) +
  geom_point(size = 3, shape = 15) +
  geom_errorbar(aes(ymin = min, ymax = max ), width = 0.05, size = 0.4) +
  scale_y_continuous('% Weight relative to die', limits = c(92, 104), breaks = seq(96, 109, by = 4)) +
  labs(title = 'Weighted across EC-3 cycles', x = 'Phase') +
  coord_cartesian(expand = FALSE) +
  theme_classic(base_size = 16) +
  theme(panel.background = element_rect(fill = "grey90"),
        panel.grid.major = element_line(color = "white"),
        panel.grid.minor = element_blank(),
        axis.line = element_line(color = "black"),
        axis.text = element_text(color = "black"),
        axis.ticks = element_line(color = "black"),
        axis.title = element_text(face = "bold"),
        legend.position = "right",
        plot.title = element_text(face = 'bold', hjust = 0.5),
        plot.title.position = 'plot'
  ) +
  facet_wrap(~group)

修改后的完整示例代码(旋转+边距组合)

library(ggplot2)

cc%>%ggplot(aes(name, value)) +
  geom_blank() +
  geom_line(aes(group = 1), linewidth = 1.5) +
  geom_point(size = 3, shape = 15) +
  geom_errorbar(aes(ymin = min, ymax = max ), width = 0.05, size = 0.4) +
  scale_y_continuous('% Weight relative to die', limits = c(92, 104), breaks = seq(96, 109, by = 4)) +
  labs(title = 'Weighted across EC-3 cycles', x = 'Phase') +
  coord_cartesian(expand = FALSE) +
  theme_classic(base_size = 16) +
  theme(panel.background = element_rect(fill = "grey90"),
        panel.grid.major = element_line(color = "white"),
        panel.grid.minor = element_blank(),
        axis.line = element_line(color = "black"),
        axis.text = element_text(color = "black"),
        axis.text.x = element_text(angle = 45, hjust = 1, size = 14),
        axis.ticks = element_line(color = "black"),
        axis.title = element_text(face = "bold"),
        legend.position = "right",
        plot.title = element_text(face = 'bold', hjust = 0.5),
        plot.title.position = 'plot',
        plot.margin = margin(b = 30)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:54:58