试图了解如何为ggplot构建我的数据

时间:2017-05-31 03:29:54

标签: r ggplot2

我正在学习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正在做什么,它是趋势会话,但没有分组月和频道来获得月/频道的不同值,而是绘制完整的未分组数据。

  1. 我是否以合理的方式构建数据以实现目标?显然我需要改变它,但在思考我想要使用哪些维度和指标时,我的结构是否有意义,或者我应该从一开始就采用不同的方式做到这一点?
  2. 我该怎样做才能按照我想要的方式拍摄情节? x轴上有24个点,每个通道会话有6个不同的彩色折线图。
  3. 我考虑使用tidyr package spread()函数按频道传播会话。我认为这样可行,但没有尝试过。我对此犹豫不决,因为我最终还想了解趋势和收入指标,这意味着在我的数据框中添加了很多列。这似乎“不整洁”。从理论上讲,理想的数据框架会是什么样的?

0 个答案:

没有答案