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

使用ggplot绘制柱状图出现abs(x)非数值参数错误如何解决

问题排查与修复方案

错误根因

  • 核心问题:使用lapply()处理df$date列后,返回结果为列表类型,而非ggplot可识别的字符/因子向量,ggplot在统计柱状图分组计数时,无法对列表类型变量执行数学运算,直接触发非数值参数报错
  • 衍生问题:date_abbreviator()函数的输入是字符串格式的日期值,不是R内置的Date类型,直接调用strftime()会解析失败,导致最终输出的date列值异常

修复后的完整代码

library(ggplot2)
library(dplyr)
library(stringr)

adder_dd_with_yyyy_mm <- function(date) {
  if(str_count(date, "-") == 1) {
    return(paste(date, "01", sep = "-"))
  } else {
    return(date)
  }
}

date_abbreviator <- function(date_str) {
  # 先将字符串转换为Date类型再执行格式化
  date_obj <- as.Date(date_str)
  month <- strftime(date_obj, format = "%b")
  year <- strftime(date_obj, format = "%y")
  return(paste(month, year, sep = "-"))
}

df <- read.csv("figure_metadata.tsv", sep = "\t")

# 用sapply代替lapply返回向量,同时转成因子保证时间排序正确
df$date <- df$date %>% 
  sapply(adder_dd_with_yyyy_mm) %>%
  sapply(date_abbreviator) %>%
  factor(levels = unique(.))

ggplot(data = df) +
  geom_bar(mapping = aes(x = date, fill = clade))

验证方法

执行代码后如果仍有异常,可运行str(df$date)检查列类型,确认输出为Factor或chr类型、而非list即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:02