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

ggplot犯罪数据图表X轴不显示及scale_x_continuous报错求助

问题分析与解决方案

我来帮你拆解下遇到的两个核心问题:X轴标签不显示,以及使用scale_x_continuous时的报错,一步步来解决:

1. 报错原因:离散变量误用了连续刻度

你看到的Error: Discrete value supplied to continuous scale错误,本质是变量类型和刻度函数不匹配:

  • 你的X轴映射的是Crime列,这是离散的犯罪类别(比如盗窃、抢劫这类分类),属于离散变量;
  • 而scale_x_continuous是专门给连续数值型变量(比如金额、人数这类可排序的数值)设置刻度的函数,把离散类别塞进去自然会触发报错。

2. X轴不显示的潜在原因

结合你的代码来看,主要有两个问题:

  • 你在aes里直接用了london2012$Crime这种写法,虽然能运行,但不符合ggplot的语法规范,容易导致变量映射混乱;
  • 如果犯罪类别的名称过长,X轴标签可能会被自动隐藏,或者因为没有正确设置离散轴的显示逻辑导致不显示。

3. 修正后的完整代码

我帮你调整了代码,同时解决这两个问题:

# 正确的ggplot写法:先指定数据源,aes里直接用列名即可
ggplot(london2012, aes(x = Crime, y = X2012)) +
  geom_col(aes(fill = as.factor(Crime))) + # fill用Crime的因子类型,无需加数据框前缀
  scale_x_discrete() + # 明确指定离散X轴,可在这里调整标签、显示顺序等
  # 调整X轴标签角度,避免重叠,解决标签不显示的问题
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1)) +
  # 添加清晰的轴标签和图例标题
  labs(x = "犯罪类型", y = "2012年犯罪数量", fill = "犯罪类型")

4. 额外优化提示

  • 如果你的Crime列已经是因子类型,as.factor(Crime)可以直接写成Crime;
  • 要是你想筛选X轴显示的类别,可以用scale_x_discrete(limits = c("盗窃", "抢劫"))这样的写法,指定要展示的类别;
  • 记住:ggplot的aes里优先用列名,不要加数据框前缀,这样代码更简洁,也不容易出映射问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:42