在双因子ggplot中独立调整柱宽、内边距与X轴类别间距
解决方法
要在不改动柱宽和组内边距的前提下拉大X轴上「猫」和「狗」两类的间距,可以把分类X轴转成数值轴,手动控制各组的位置,具体代码如下:
sex <- c('f','m','f','m') pet <- c('cat', 'cat', 'dog', 'dog') mean <- c(4, 5, 4, 5) df <- data.frame(sex, pet, mean) # 给每个pet类别分配数值位置,这里cat放1,dog放3,间距可自行调整 df$pet_pos <- case_match(df$pet, "cat" ~ 1, "dog" ~ 3) ggplot(data = df, aes(x = pet_pos, y = mean, fill = sex)) + geom_bar(stat = 'identity', position = position_dodge2(preserve = "single", padding = 0.2), width = 1) + # 保留原柱宽 # 把数值轴转回原分类标签 scale_x_continuous(breaks = c(1, 3), labels = c("cat", "dog")) + labs(x = "pet")
说明
- 核心思路是用数值代替分类变量,通过调整数值的间隔来控制组间距离(比如把dog的数值改成4,间距会更大)。
- 原代码里的
width(柱宽)和padding(组内边距)参数完全保留,确保柱子本身的尺寸和内部间隔不变。 - 最后用
scale_x_continuous把数值刻度替换成原分类名称,不影响图表可读性。
内容的提问来源于stack exchange,提问作者wythe4
相关产品推荐
相关产品推荐

