求绘制离散折线图的R代码,附现有尝试代码及数据集
嘿,我来帮你优化这个离散阶梯折线图的绘制~ 你的基础代码已经用type="s"实现了阶梯图的雏形,但还存在x轴标签拥挤、没有多变量对比、样式不够清晰的问题。下面我会给出两种优化方案,都基于你提供的数据集:
优化离散阶梯折线图的R实现
方案1:Base R 实用改进版
我们可以扩展代码,同时展示**上车(Boarding)、下车(Alighting)和载客量(Load)**三个指标,还能解决x轴标签重叠的问题,添加清晰的标注和图例:
# 你的原始数据集 bus.stop<-c("Polic Chowk","Regional bus stand","hospital", "Alanpura", "Housing Colony", "PG College", "Ranthambore circle" , "Railway station", "Collectorate", "New Bus stand") boarding<-c(18,9,15,3,7,1,1,0,0,0) alighting<-c(0,3,7,5,8,1,13,8,5,4) load<-c(18,24,38,32,29,27,23,11,4,0) hous.oton<-data.frame("BusStop" = bus.stop, "Boarding" = boarding, "Alighting"=alighting, "Load"=load) # 调整绘图边距,给旋转的x轴标签留空间 par(mar = c(8, 4, 4, 2) + 0.1) # 先绘制上车人数的阶梯线,设置y轴范围适配最大载客量 plot(hous.oton$Boarding ~ hous.oton$BusStop, type="s", col="darkblue", lwd=2, xlab="", ylab="人数", main="公交站点客流与载客量变化", ylim=c(0, max(hous.oton$Load)*1.1)) # 添加下车人数的虚线阶梯线 lines(hous.oton$Alighting ~ hous.oton$BusStop, type="s", col="darkred", lwd=2, lty=2) # 添加载客量的点线阶梯线 lines(hous.oton$Load ~ hous.oton$BusStop, type="s", col="darkgreen", lwd=2, lty=3) # 旋转x轴标签,避免重叠 axis(1, at=1:nrow(hous.oton), labels=hous.oton$BusStop, las=2, cex.axis=0.8) # 添加右上角图例 legend("topright", legend=c("上车人数", "下车人数", "实时载客量"), col=c("darkblue", "darkred", "darkgreen"), lty=c(1,2,3), lwd=2, bty="n")
方案2:ggplot2 美观定制版
如果想要更现代、易调整的视觉效果,推荐用ggplot2包,它处理多变量绘图和样式定制更灵活:
# 先安装并加载所需包(第一次用先运行install.packages(c("ggplot2", "tidyr"))) library(ggplot2) library(tidyr) # 将宽格式数据转为长格式,方便ggplot2批量处理多变量 hous_long <- pivot_longer(hous.oton, cols = c(Boarding, Alighting, Load), names_to = "指标", values_to = "人数") # 绘制带数据点的阶梯图 ggplot(hous_long, aes(x = BusStop, y = 人数, group = 指标, color = 指标)) + geom_step(size=1.2) + # 阶梯线 geom_point(size=3) + # 添加数据点,让数值更直观 theme_minimal() + labs(title="公交站点客流与载客量变化", x="公交站点", y="人数") + theme(axis.text.x = element_text(angle=45, hjust=1, vjust=1), # 旋转x轴标签 plot.title = element_text(hjust=0.5, size=14, face="bold")) + scale_color_manual(values = c("Boarding"="darkblue", "Alighting"="darkred", "Load"="darkgreen"), labels = c("上车人数", "下车人数", "实时载客量"))
小提示:
- Base R里的
type="s"和ggplot2的geom_step()都是实现离散阶梯折线图的核心参数 - 旋转x轴标签是处理长站点名称的关键,避免标签堆叠看不清
- 调整y轴范围可以确保所有数据都能完整展示
内容的提问来源于stack exchange,提问作者Sork-kal
相关产品推荐
相关产品推荐

