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

ggplot绘制USArrests谋杀案条形图报错stat_count()的解决方法

解决USArrests数据集绘制各州谋杀案数量条形图的错误问题

嘿,我来帮你搞定这个ggplot绘图的问题!先说说你遇到的错误:"stat_count() must not be used with a y aesthetic",这是因为geom_bar()默认会用stat_count()统计类别频数,但你已经明确指定了y轴是Murder的具体数值,两者逻辑冲突才报错的。接下来逐个解答你的疑问:

你的疑问解答

  • 疑问1:是否应移除row.names,改用x = USArrests$State?
    首先得明确:USArrests本身没有State列,州名是存在行名(row.names)里的,直接写USArrests$State会报错。正确的做法是先把行名转换成数据框的一列,比如用tibble::rownames_to_column()函数处理数据,这样后续用新生成的State列作为x轴更规范,也符合ggplot的语法习惯(尽量避免在aes里直接用$引用外部对象)。

  • 疑问2:是否应使用theme(axis.angle.x = 90)替代当前设置?
    不行哦,ggplot里根本没有axis.angle.x这个参数。你原来写的theme(axis.text.x=element_text(angle=90, hjust=1))是完全正确的,这个设置能把x轴的州名旋转90度并右对齐,避免文本重叠。

  • 疑问3:geom_histogram()是否比geom_bar()更合适?
    完全不合适。geom_histogram是用来展示连续变量的分布的,它会把连续数值切成多个区间统计频数;而你要做的是展示每个州(离散类别)对应的谋杀案数值,属于类别-数值的对应关系,所以还是得用条形图类的几何对象。

  • 疑问4:是否应改用geom_col()替代geom_bar()?
    没错!这就是解决错误的核心。geom_col()是直接绘制你给定的y轴数值,而geom_bar()默认是统计x轴类别的数量。因为你已经有了每个州对应的Murder数值,用geom_col()正好匹配需求,不会触发stat_count的冲突。

正确的绘图命令

先处理数据把行名转成列,再绘图:

# 加载必要的包
library(ggplot2)
library(tibble)

# 将行名转为State列,整理数据集
arrests_data <- rownames_to_column(USArrests, "State")

# 绘制条形图
ggplot(arrests_data, aes(x = State, y = Murder)) +
  geom_col(fill = "#2c3e50") + # 用geom_col替代geom_bar,可自定义填充色
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) + # 加vjust让文本更居中
  labs(title = "美国各州谋杀案数量", x = "州", y = "谋杀案数量(每10万人)")

这样就能正常生成每个州谋杀案数量的条形图啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:23