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

ggplot绘制多轴日期图表报错:as.matrix(x)参数缺失求助

问题翻译

我尝试创建一个X轴为单一日期、展示多个整数变量的图表,但创建基础图表时反复报错:

"Error in as.matrix(x) : argument "x" is missing, with no default"

以下是我的全部代码,求帮忙!

avail <- avail %>%
  mutate(Date = as.Date(avail$Date, format = "%a %d-%b-%Y"))
  avail <- format(avail, format="%d-%m-%Y")
  avail

names(avail)[2] <- "Available Jobs"

df <- data.frame("Date" = avail$Date,
                "Available Jobs" = avail$`Available Jobs`,
                "Jobs" = job$Jobs.Added,
                "Views" = view$Views)

报错的代码部分:

ggplot(df, aes(x=df$Date))+
  geom_line(aes(y=df$Available.Jobs), size=2, color=scale.default())+
  geom_line(aes(y=df$Views), size=2, color=scale.default())+
  scale_x_continuous(
    name= "Available Jobs",
    sec.axis = sec_axis(~.*coeff, name = "Views"))+
  ggtitle("September views against available jobs")

问题根源及修复方案

1. 数据预处理的致命错误

你在处理avail数据框时犯了两个核心错误:

  • mutate之后没有用管道符%>%衔接,导致avail <- format(avail, format="%d-%m-%Y")把整个数据框转成了字符型,Date列不再是日期格式,ggplot无法识别X轴为日期类型。
  • 列名Available Jobs带空格,后续引用极易出错,建议改成无空格的命名格式。

修正后的预处理代码:

# 处理日期并修正列名,保留Date的日期类型
avail <- avail %>%
  mutate(Date = as.Date(Date, format = "%a %d-%b-%Y")) %>%
  rename(Available_Jobs = 2) # 直接将第二列重命名为无空格的名称

# 合并数据,确保各数据框的Date能匹配,且类型正确
df <- data.frame(
  Date = avail$Date,
  Available_Jobs = avail$Available_Jobs,
  Jobs = job$Jobs.Added,
  Views = view$Views
)

# 可选:检查数据结构,确认Date为Date类型,其他列为数值型
str(df)

2. ggplot代码的错误修复

报错的直接原因是color=scale.default()完全错误——scale.default是R内部函数,不能用来指定颜色;同时还有X轴类型错误、列名引用错误、双Y轴系数未定义等问题。

修正后的ggplot代码:

# 先计算双Y轴转换系数(用两个变量的最大值比例,避免其中一条线被压缩)
coeff <- max(df$Available_Jobs, na.rm = TRUE) / max(df$Views, na.rm = TRUE)

ggplot(df, aes(x = Date)) +
  # 第一条线:可用岗位数量
  geom_line(aes(y = Available_Jobs), size = 2, color = "#2E86AB") +
  # 第二条线:浏览量,按系数转换适配左侧Y轴
  geom_line(aes(y = Views * coeff), size = 2, color = "#F24C4E") +
  # X轴用日期专用刻度
  scale_x_date(
    name = "日期",
    date_labels = "%d-%m-%Y", # 自定义日期显示格式
    date_breaks = "1 week" # 按周显示刻度,可根据需求调整
  ) +
  # Y轴设置,包含右侧副轴
  scale_y_continuous(
    name = "可用岗位数量",
    sec.axis = sec_axis(~ . / coeff, name = "浏览量")
  ) +
  ggtitle("9月浏览量与可用岗位数量趋势") +
  theme_minimal() # 可选:美化图表主题

关键错误点说明

  • 不要在aes()中用df$列名的方式引用,直接写列名即可,ggplot会自动从指定数据框读取。
  • 日期轴必须用scale_x_date,scale_x_continuous只适用于连续数值轴。
  • color参数需要直接传入颜色值(如十六进制码、颜色名称),scale.default()是错误用法。
  • 双Y轴必须先计算比例系数,否则数值差异大的变量会被压缩成直线,失去可视化意义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:20:29