根据路径的频率缩放线条的颜色

时间:2017-10-09 17:40:52

标签: r ggplot2 data-visualization

我正在尝试绘制人们参与营销内容时所采取的路径。

我有关于所有营销活动(点击链接等),他们的营销渠道&#39以及他们的参与职位的数据"。

参与职位如下:首先触摸[他们第一次与我们互动],领导创建[当他们形成填充并给我们足够的信息],机会创造[在机会创建之前发生的参与] ,并且关闭赢了[签署和购买之前发生的订婚]。

我实际上是成功映射路径,但问题是14个通道和100k +个别路径,结果图表非常难以理解。

因此,我想根据整个路径出现的频率来缩放线条的颜色。

这是我有数据的格式:

______________________________
| id  |  channel  | position |
| 1   | direct    | FT       |
| 1   | SEM       | LC       |
| 1   | email     | OC       |
| 1   | video     | CW       |
| 2   | SEM       | FT       |
| 2   | Video     | LC       |
| 2   | Event     | OC       |
| 2   | Email     | CW       |
______________________________

所以我希望图表的Y轴是位置,X轴是通道,然后缩放每个单独路径的颜色(由ID标识)取决于整个路径的频率。所以我不希望它向我展示什么是最常见的FT到LC,然后是最常见的LC到OC等 - 我想让它显示最常见的完整路径。

这是我当前代码的数据示例:

map picture

这是使用以下代码创建的:

ggplot(tblp, aes(x=position, y=channel, group=id)) +
geom_line(alpha=.01, size=.5)

所以我现在需要做的就是根据整个路径的频率来改变色阶。这需要不同的数据框设置吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您的数据目前已经过结构化,因此路径上的每个点都是一行;要衡量路径的频率,您需要重新整形数据,以便每个完整路径都是一行,然后将汇总数据加回到id上的当前数据格式。通过tidyr::spread和一些dplyr操作,这非常简单。


library(tidyverse)

tb <- tribble(~id, ~channel, ~position
              , 1, "direct", "FT"
              , 1, "SEM", "LC"
              , 1, "email", "OC"
              , 1, "video", "CW"
              , 2, "SEM", "FT"
              , 2, "Video", "LC"
              , 2, "Event", "OC"
              , 2, "Email", "CW"
              , 3, "SEM", "FT"
              , 3, "Video", "LC"
              , 3, "Event", "OC"
              , 3, "Email", "CW")

spread_tb <- tb %>% spread(position, channel)

spread_tb
#> # A tibble: 3 x 5
#>      id    CW     FT    LC    OC
#> * <dbl> <chr>  <chr> <chr> <chr>
#> 1     1 video direct   SEM email
#> 2     2 Email    SEM Video Event
#> 3     3 Email    SEM Video Event

to_plot <-
  spread_tb %>%
  group_by(FT, CW, LC, OC) %>%
  summarise(n = n()) %>%
  ungroup() %>%
  right_join(spread_tb, by = c("FT", "CW", "LC", "OC")) %>%
  select(n, id) %>%
  right_join(tb, by = 'id')

to_plot
#> # A tibble: 12 x 4
#>        n    id channel position
#>    <int> <dbl>   <chr>    <chr>
#>  1     1     1  direct       FT
#>  2     1     1     SEM       LC
#>  3     1     1   email       OC
#>  4     1     1   video       CW
#>  5     2     2     SEM       FT
#>  6     2     2   Video       LC
#>  7     2     2   Event       OC
#>  8     2     2   Email       CW
#>  9     2     3     SEM       FT
#> 10     2     3   Video       LC
#> 11     2     3   Event       OC
#> 12     2     3   Email       CW

ggplot(to_plot, aes(x=position, y=channel, group=id, color = n)) +
  geom_line()