在R语言中不使用ggplot如何绘制多系列折线图?
R绘制多类别联系量折线图实现方法
你可以根据自己手里的长表/宽表数据选择对应实现方案:
前置注意事项
- 转换日期格式时务必指定格式参数,避免R识别错误:
as.Date(日期列, format = "%m/%d/%Y") - 你提供的宽表中2012年4月的日期和长表原始数据不一致,绘图前请核对数据准确性
- 多系列绘图需要提前设置Y轴范围,避免后续添加的折线超出绘图区域
方案1:基于原始长表的基础R实现
无需转换宽表,直接过滤出需要的三个类别绘图即可:
# 1. 预处理日期列 df_long$Date <- as.Date(df_long$Date, format = "%m/%d/%Y") # 2. 拆分三个类别的数据 email_dat <- df_long[df_long$Action == "Email", ] text_dat <- df_long[df_long$Action == "Text", ] phone_dat <- df_long[df_long$Action == "Phone Call", ] # 3. 绘制第一个折线(Email),同时设定好Y轴范围 plot(email_dat$Date, email_dat$Daily.Contact, type = 'l', lwd = 2, col = "#E41A1C", xlab = "日期", ylab = "每日联系量", ylim = range(c(email_dat$Daily.Contact, text_dat$Daily.Contact, phone_dat$Daily.Contact))) # 4. 添加剩余两个折线 lines(text_dat$Date, text_dat$Daily.Contact, lwd = 2, col = "#377EB8") lines(phone_dat$Date, phone_dat$Daily.Contact, lwd = 2, col = "#4DAF4A") # 5. 添加图例 legend("topright", legend = c("Email", "短信", "电话"), col = c("#E41A1C", "#377EB8", "#4DAF4A"), lwd = 2)
方案2:基于处理后宽表的基础R实现
如果已经完成长表转宽表,可以直接调用对应列绘图:
# 1. 预处理日期列 df_wide$Date <- as.Date(df_wide$Date, format = "%m/%d/%Y") # 2. 绘制第一个折线(Email),同时设定好Y轴范围 plot(df_wide$Date, df_wide$Email, type = 'l', lwd = 2, col = "#E41A1C", xlab = "日期", ylab = "每日联系量", ylim = range(c(df_wide$Email, df_wide$Text, df_wide$`Phone Call`))) # 3. 添加剩余两个折线 lines(df_wide$Date, df_wide$Text, lwd = 2, col = "#377EB8") lines(df_wide$Date, df_wide$`Phone Call`, lwd = 2, col = "#4DAF4A") # 4. 添加图例 legend("topright", legend = c("Email", "短信", "电话"), col = c("#E41A1C", "#377EB8", "#4DAF4A"), lwd = 2)
方案3:ggplot2实现(代码更简洁)
推荐用长表输入,无需手动拆分数据,自动生成图例:
library(ggplot2) ggplot(df_long[df_long$Action != "All", ], # 过滤不需要的All类别 aes(x = as.Date(Date, format = "%m/%d/%Y"), y = Daily.Contact, color = Action, group = Action)) + geom_line(linewidth = 2) + labs(x = "日期", y = "每日联系量", color = "联系类型") + theme_minimal()
内容的提问来源于stack exchange,提问作者rupunzel234
相关产品推荐
相关产品推荐

