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

R语言如何解决'x' must be numeric报错?绘制直方图遇问题求助

解决R中绘制分类数据直方图的报错问题

首先,你碰到的Error in hist.default(data) : 'x' must be numeric报错,核心原因很明确:hist()函数是专门为连续数值型变量设计的,而你的数据里包含了字符串类型的分类标签(Safely、Basic这类),直接把整个数据框传给hist(),它没法处理非数值的分类变量,所以抛出了这个错误。

而且更关键的是:你的数据是「分类对应数值」的离散型数据,直方图根本不是适合的图表类型——直方图用来展示连续数据的分布规律,比如身高、体重的分布情况,而你要做的是对比不同分类对应的数值大小,这时候用**条形图(barplot)**才是正确选择。

下面给你两种可行的解决方法:

方法一:直接构造数据绘制

如果你已经明确知道每个分类对应的数值,可以直接构造向量来绘图:

# 定义分类标签和对应数值
category_names <- c("Safely", "Basic", "Limited", "Unimproved", "Open")
category_values <- c(39, 29, 8, 12, 12)

# 绘制条形图,设置Y轴范围0-100
barplot(category_values,
        names.arg = category_names,  # 指定X轴的分类标签
        ylim = c(0, 100),            # 设置Y轴范围为0到100
        xlab = "分类",               # X轴标题
        ylab = "数值",               # Y轴标题
        col = "lightblue"            # 可选:给条形设置颜色
)

方法二:从Excel读取数据后绘制

如果你的数据存储在Excel文件里,读取后要正确提取分类和数值列来绘图:

library(readxl)
# 读取Excel数据
data <- read_excel("data.xls")

# 绘制条形图,假设你的Excel里有两列:"分类"(字符型)和"数值"(数值型)
barplot(data$数值,
        names.arg = data$分类,
        ylim = c(0, 100),
        xlab = "分类",
        ylab = "数值"
)

最后再划个重点:

  • 直方图和条形图是完全不同的图表:前者针对连续数值的分布,后者针对分类数据的数值对比
  • 你只需要把hist()换成barplot(),再配置好参数,就能得到你想要的图表了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:00:45