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

如何使ggplot2中跨度不同的x轴刻度保持相等间距?

调整ggplot柱状图X轴刻度为等间距显示

我们使用的数据框如下:

df <- data.frame(
  n = c(0, 0, 0, 5, 5, 5, 100, 100, 100),
  y = c(1, 2, 1.5, NA, 2, 2.5, NA, 3, 4.5),
  f = c("i", "j", "k", "i", "j", "k", "i", "j", "k")
)

原绘制柱状图的代码:

colors <- c("i" = "#1F1F1F", "j" = "#606060", "k" = "#B3B3B3")
ggplot(data = df, aes(x = n, y = y, fill = f), show.legend = TRUE) +
  geom_bar(stat = "identity", position = "dodge", width = 3.5) +
  scale_fill_manual(values = colors, labels = c("i", "j", "k"), labs(title = "Title")) +
  theme_bw()

问题分析

当前X轴使用的是连续数值型的n,由于0、5、100的数值跨度极大,导致X轴刻度间距不均。要实现三个刻度等间距显示,本质是要把n当作分类变量而非连续变量处理。

解决方案

将n转换为因子(factor)类型,ggplot会自动将其视为等间距的分类轴。修改后的完整代码如下:

colors <- c("i" = "#1F1F1F", "j" = "#606060", "k" = "#B3B3B3")
# 将n转为因子,指定顺序确保刻度按0、5、100排列
df$n <- factor(df$n, levels = c("0", "5", "100"))

ggplot(data = df, aes(x = n, y = y, fill = f)) +
  geom_bar(stat = "identity", position = "dodge", width = 0.7, show.legend = TRUE) +
  scale_fill_manual(values = colors, labels = c("i", "j", "k")) +
  labs(title = "Title", x = "n") +
  theme_bw()

关键说明

  1. 把n转为因子后,X轴的三个类别会自动等间距排列,无需再使用scale_x_continuous
  2. 原代码中show.legend = TRUE放在ggplot()参数里无效,需移至geom_bar()中或通过theme()设置
  3. 分类轴下的柱状图宽度建议调整为0.6-0.8,比连续轴的3.5更适配显示效果

如果不想修改原始数据框,也可以直接在aes中定义x = factor(n, levels = c(0,5,100)),效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:21:05