如何在R中基于同一数据集生成月度每日潜在客户柱状图
问题解决:按月生成每日潜在客户总数柱状图
原代码的核心问题
- 数据中未提取
Month列,无法按月份拆分 - 嵌套后调用绘图函数时,传入的是完整数据集而非对应月份的子数据
- 未对每日潜在客户数进行汇总,直接使用原始单条记录绘图会导致堆叠而非总数
- 标题未关联具体月份,且x轴使用完整日期而非当月的日部分
完整修正方案
1. 数据预处理(提取月份+汇总每日总数)
首先对原始数据进行加工,提取月份、日期的日部分,并按月份+日汇总潜在客户总数:
library(tidyverse) library(lubridate) # 保留原模拟数据代码 set.seed(1) sample_size <- 1200 dates <- sample(seq(1,31),sample_size,replace = TRUE) Monthss <- sample(seq(1,12),sample_size,replace = TRUE) hrs <- sample(seq(1,23),sample_size,replace = TRUE) minutes <- sample(seq(1,59),sample_size,replace = TRUE) date_time_vector <- paste0(dates,"-",Monthss,"-",2022," ",hrs,":",minutes) |> parse_date_time("dmy HM") Conversion <- sample(c(TRUE,FALSE),sample_size, prob = c(0.25,0.75), replace = TRUE) df <- data.frame(Date = date_time_vector, Conversion_Status = Conversion) df <- df |> mutate(Leads = round(runif(sample_size, min = 0,max = 10),digits = 0)) df <- df[complete.cases(df), ] # 新增:提取月份名称、日部分,汇总每日潜在客户总数 df_processed <- df |> mutate( Month = month(Date, label = TRUE, abbr = FALSE), # 提取完整月份名称(如"January") Day = day(Date) ) |> group_by(Month, Day) |> summarise(Daily_Total_Leads = sum(Leads), .groups = "drop") |> group_by(Month) |> nest() # 按月份嵌套子数据集
2. 修正绘图函数
调整函数接收子数据集和月份名称,生成对应月份的柱状图:
bar_function <- function(df_sub, month_name) { df_sub %>% ggplot(aes(x = factor(Day), y = Daily_Total_Leads)) + geom_col(fill = "steelblue") + theme( plot.background = element_rect(fill = "white"), plot.title = element_text(hjust = 0.5) ) + labs( title = str_glue("Daily Leads for {month_name}"), x = "Day of Month", y = "Total Leads" ) }
3. 批量生成所有月份图表
使用map2配对子数据集和月份名称,生成每个月份的图表:
mycharts <- df_processed |> mutate(plot = map2(data, Month, bar_function)) # 查看指定月份的图表(例:查看1月) mycharts$plot[[which(mycharts$Month == "January")]]
关键修正说明
- 用
month(Date, label = TRUE)提取直观的月份名称,替代数字编号 - 按
Month+Day汇总Leads,确保每个日对应唯一的总数 - 使用
nest()+map2实现子数据与月份的精准配对,避免传入完整数据集 - x轴用
factor(Day)避免非连续日期出现空隙(若需保留日期连续性可去掉factor())
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

