R语言基于ggplot2绘制双折线图时画布显示空白的问题咨询
问题根因
- 数据定义疏漏:执行
as.Date(date)仅输出了类型转换结果,未将转换后的日期值重新赋值给date变量,最终生成的graded_marvel数据框中date列仍为普通字符向量,无法被识别为可用于绘制连线的连续时间序列。 - 绘图逻辑疏漏:当x轴为字符/分类类别的离散变量时,
geom_line必须明确指定分组规则,否则ggplot会将每一个观测值判定为独立分组,不会执行跨点连线操作,最终仅生成带数值刻度的空白坐标轴。
修正方案
- 补全日期类型转换的赋值操作,将date列转为标准日期格式
- 匹配x轴类型补充绘图配置,触发折线渲染逻辑
完整可运行代码
修正后的数据定义:
date <- c("2021-04-06","2021-04-10", "2021-04-14", "2021-04-18") date <- as.Date(date) # 补全缺失的赋值步骤 graded <- c(3408, 3572, 3647, 3864) psa10 <- c(2099, 2130, 2147, 2193) graded_marvel <- data.frame(date, graded, psa10)
修正后的绘图代码:
library("ggplot2") # 当date列为连续日期类型时,无需额外设置分组即可正常渲染折线 graph <- ggplot(graded_marvel, aes(x = date)) + geom_line(aes(y = graded), color = "darkred") + geom_line(aes(y = psa10), color = "blue") + labs(x = "记录日期", y = "累计评级数量") print(graph)
补充适配方案:如果希望保留date列的字符格式不做类型转换,仅需在ggplot全局映射中增加
group = 1参数,即可触发跨点连线逻辑,参考代码:graph <- ggplot(graded_marvel, aes(x = date, group = 1)) + geom_line(aes(y = graded), color = "darkred") + geom_line(aes(y = psa10), color = "blue")
内容的提问来源于stack exchange,提问作者Aditya Bhalla
相关产品推荐
相关产品推荐

