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
相关产品推荐
相关产品推荐

