我正在学习ggplot,并希望根据随机生成的虚拟数据构建一个示例图。但是我得到了一个ggplot错误(我有意留下直到最后,因为我实际上想退后一步,确保我已经理解了理想数据的外观)。
我已经使用以下块构建了一个数据集:
# dimensions
channels <- c("Facebook", "Youtube", "SEM", "Organic", "Email", "Direct")
last_month <- Sys.Date() %m+% months(-1) %>% floor_date("month")
mts <- seq(from = last_month %m+% months(-23), to = last_month, by = "1 month") %>% format("%b-%Y")
dimvars <- expand.grid(Month = mts, Channel = channels)
# metrics
rws <- nrow(dimvars)
set.seed(123)
Sessions <- ceiling(rnorm(rws, mean = 3000, sd = 300))
Transactions <- ceiling(rnorm(rws, mean = 200, sd = 40))
Revenue <- ceiling(rnorm(rws, mean = 10000, sd = 100))
# make df
dataset <- cbind(dimvars, Sessions, Transactions, Revenue)
这是它的样子:
head(dataset)
Month Channel Sessions Transactions Revenue
1 May-2015 Facebook 2832 136 9979
2 Jun-2015 Facebook 2931 179 10017
3 Jul-2015 Facebook 3468 142 10117
4 Aug-2015 Facebook 3022 228 10106
5 Sep-2015 Facebook 3039 285 10115
6 Oct-2015 Facebook 3515 149 9943
> str(dataset)
'data.frame': 144 obs. of 5 variables:
$ Month : Factor w/ 24 levels "May-2015","Jun-2015",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Channel : Factor w/ 6 levels "Facebook","Youtube",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Sessions : num 2832 2931 3468 3022 3039 ...
$ Transactions: num 136 179 142 228 285 149 232 231 214 160 ...
$ Revenue : num 9979 10017 10117 10106 10115 ...
现在我有一个数据集,我想要一个Sessions加班的情节。所以我尝试了这个:
## Timeline Plot
timeline <- ggplot(dataset, aes(x = Month, y = Sessions, color = Channel)) +
geom_line()
在运行时间轴代码之前,我对我的样子有所期待。我希望有一个沿x轴24个月的图表,沿着Y的会话,然后是每个通道的不同颜色的线(所以6行)
当我在控制台中输入时间轴时,会生成一个图表,但是有144个不同的月份,而不是我希望的24个月。我有点看到ggplot正在做什么,它是趋势会话,但没有分组月和频道来获得月/频道的不同值,而是绘制完整的未分组数据。
我考虑使用tidyr package spread()
函数按频道传播会话。我认为这样可行,但没有尝试过。我对此犹豫不决,因为我最终还想了解趋势和收入指标,这意味着在我的数据框中添加了很多列。这似乎“不整洁”。从理论上讲,理想的数据框架会是什么样的?