如何移动离散值坐标轴刻度至绘图边界及标签中间?
解决方案
要实现离散x轴刻度位于绘图边界及标签中间的效果,你可以利用ggplot中离散变量底层映射为连续数值的特性,手动替换x轴的刻度和标签设置,具体代码如下:
library(ggplot2) # 获取cut变量的类别水平 cut_levels <- levels(diamonds$cut) n_levels <- length(cut_levels) p2 <- ggplot(diamonds, aes(cut, price)) + geom_boxplot() + # 自动生成类别间的竖线,无需手动写数值 geom_vline(xintercept = seq(1.5, n_levels - 0.5, 1), colour = "gray92") + # 替换为连续型x轴,自定义刻度位置和标签 scale_x_continuous( breaks = seq(0.5, n_levels + 0.5, 1), labels = c("", cut_levels, ""), expand = c(0, 0) ) + theme_bw() + theme(panel.grid = element_blank()) p2
关键说明:
- 离散变量
cut在ggplot中会被自动映射为1到n_levels的连续数值,因此我们可以用scale_x_continuous直接控制x轴表现。 breaks = seq(0.5, n_levels + 0.5, 1):将刻度设置在每个类别的两侧(0.5对应左边界,1.5对应第一个和第二个类别之间,以此类推直到右边界的5.5)。labels = c("", cut_levels, ""):仅在类别对应的中间位置(1到5)显示类别名称,两端刻度的标签留空,匹配你的期望效果。expand = c(0, 0):取消x轴的默认扩展,让左右边界的刻度刚好对齐绘图区边缘。
内容的提问来源于stack exchange,提问作者msfrn
相关产品推荐
相关产品推荐

