R语言循环绘制折线图仅显示单条曲线的问题排查与修复请求
问题分析与修复方案
你遇到的问题核心是数据类型不匹配,加上循环里缺失数值预处理步骤,导致只有一条曲线能正确绘制。咱们一步步来解决:
1. 先解决数据类型问题
你的Estimates.2004和Estimates.2011列是factor类型,还带千位逗号,直接用来绘图的话会被当成因子水平而非数值——R会静默把因子转成整数,结果完全不符合预期,这就是大部分线条没显示的原因(但不会报错)。
先把这两列转成正确的数值型:
# 去掉千位逗号并转换为数值 ER$Estimates.2004 <- as.numeric(gsub(",", "", ER$Estimates.2004)) ER$Estimates.2011 <- as.numeric(gsub(",", "", ER$Estimates.2011))
2. 修正循环逻辑
你的循环索引本身是对的,但因为之前数值不对所以没画出多条线。现在数据处理好后,我们可以优化循环,加上颜色区分,最后添上图例让图表更清晰:
# 初始化绘图区域,完善轴标签 plot(0, 0, type="n", main="Drug Related Emergency Department Visits", xlab="Year", ylab="Number of Visits", xlim=c(2004, 2011), ylim=c(1000, 800000)) # 定义颜色向量,对应每种药物 colors <- c("red", "blue", "green", "purple") # 循环绘制每条曲线 for (i in 1:nrow(ER)) { # 提取当前药物的两年数据 y_vals <- c(ER$Estimates.2004[i], ER$Estimates.2011[i]) # 绘制线条,指定颜色和粗细 lines(x = c(2004, 2011), y = y_vals, col = colors[i], lwd = 2) } # 添加图例,对应药物与颜色 legend("topleft", legend = ER$Drugs, col = colors, lwd = 2, bty = "n")
为什么之前只显示一条曲线?
原始的factor列转成整数时,只有某一行的因子水平刚好对应了落在ylim范围内的数值,其他行转成的整数要么超出范围被裁剪,要么数值完全不对,所以只有一条线能显示出来。处理完数据类型后,所有线条都会正确绘制。
额外优化建议
如果后续你的数据年份更多(不止2004和2011),可以把数据转成长格式,再用ggplot2绘图,代码会更简洁易维护:
library(tidyr) library(ggplot2) # 转长格式,整理年份和访问量 ER_long <- ER %>% pivot_longer(cols = starts_with("Estimates"), names_to = "Year", values_to = "Visits", names_prefix = "Estimates.") %>% mutate(Year = as.integer(Year)) # 用ggplot2绘制折线图 ggplot(ER_long, aes(x = Year, y = Visits, color = Drugs, group = Drugs)) + geom_line(lwd = 2) + labs(title = "Drug Related Emergency Department Visits", x = "Year", y = "Number of Visits") + ylim(1000, 800000) + theme_minimal()
内容的提问来源于stack exchange,提问作者Erin Jutcheson
相关产品推荐
相关产品推荐

