2017-10-19 15 views
1

私はビジュアル上の各棒の値のラベルを持つgeom_barプロットを持っています。ここでggplotの棒グラフ間に変化率を加える

はプロットを生成するためのコードです:

# libraries 
library(shiny) 
library(tidyverse) 

# funnel bar blot 
    output$funnel_plot <- renderPlot({ 
    ggplot(exampledf, aes(x = reorder(Funnel, -Sessions), y = Sessions)) + 
     geom_bar(stat = "identity", fill = "#008080", alpha = 0.6) + 
     stat_summary(aes(label = scales::comma(..y..)), fun.y = 'sum', geom = 'text', col = 'white', vjust = 1.5) + 
     xlab("Step") + 
     ylab("Events") + 
     scale_y_continuous(labels = function(l) {l = l/1000; paste0(l, "K")}) 
    }) 

そして、ここではそれに供給するためのデータフレームです。ここで

exampledf <- structure(list(Channel = c("Facebook", "Youtube", "SEM", "Organic", 
"Direct", "Email", "Facebook", "Youtube", "SEM", "Organic", "Direct", 
"Email", "Facebook", "Youtube", "SEM", "Organic", "Direct", "Email", 
"Facebook", "Youtube", "SEM", "Organic", "Direct", "Email"), 
    Promo = c("None", "None", "None", "None", "None", "None", 
    "Partner Offer", "Partner Offer", "Partner Offer", "Partner Offer", 
    "Partner Offer", "Partner Offer", "Print Code", "Print Code", 
    "Print Code", "Print Code", "Print Code", "Print Code", "Affiliate Promo", 
    "Affiliate Promo", "Affiliate Promo", "Affiliate Promo", 
    "Affiliate Promo", "Affiliate Promo"), Sessions = c(26126, 
    16885, 32229, 2446, 16353, 79202, 7688, 83475, 48834, 53475, 
    71238, 78728, 76710, 125571, 125719, 17142, 103206, 181082, 
    27071, 42571, 716, 139871, 21676, 59560), AddToCart = c(7228, 
    4436, 8344, 575, 4275, 23681, 1982, 18489, 14433, 14995, 
    20769, 20119, 18471, 35566, 33423, 5187, 28138, 48186, 7140, 
    11602, 190, 35795, 5193, 17064), Registrations = c(2780, 
    1706, 3209, 221, 1644, 9108, 762, 7111, 5551, 5767, 7988, 
    7738, 7104, 13679, 12855, 1995, 10822, 18533, 2746, 4462, 
    73, 13767, 1997, 6563), ShippingDetails = c(1069, 656, 1234, 
    85, 632, 3503, 293, 2735, 2135, 2218, 3072, 2976, 2732, 5261, 
    4944, 767, 4162, 7128, 1056, 1716, 28, 5295, 768, 2524), 
    Checkout = c(668, 410, 771, 53, 395, 2189, 183, 1709, 1334, 
    1386, 1920, 1860, 1707, 3288, 3090, 479, 2601, 4455, 660, 
    1072, 17, 3309, 480, 1577), Transactions = c(556, 341, 642, 
    44, 329, 1824, 152, 1424, 1111, 1155, 1600, 1550, 1422, 2740, 
    2575, 399, 2167, 3712, 550, 893, 14, 2757, 400, 1314)), class = "data.frame", row.names = c(NA, 
-24L), .Names = c("Channel", "Promo", "Sessions", "AddToCart", 
"Registrations", "ShippingDetails", "Checkout", "Transactions" 
)) 

は、プロットがどのように見えるかのスクリーンショットです: enter image description here

私は割合の変化を示す各バーの間に改行(おそらく新しいSTATの概要を?)を追加したいと思います。最初の2小節、セッション、カートに追加すると、値は1.4Mから385k = 72%の低下に変わりました。だから、私はバーの間に何らかの形で "72%"を表示したいと思います。

これを行うには正直な方法がありますか?

テーブルを作成してビジュアライゼーションで表示することはできましたが、ビジュアル自体にパーセンテージのドロップを追加する方法を見たいと思っていました。

左から右の各バーの間にパーセント低下を追加するにはどうすればよいですか?

+0

多分、関連する代替:https://stackoverflow.com/questions/35854964/plot-a-simple-conversion-funnel-in-ggplot – zx8754

答えて

4

あなたは試すことができます:

as.tbl(df) %>% 
    gather(key, value, -Channel, -Promo) %>% 
    group_by(key) %>% 
    summarise(Sum=sum(value)) %>% 
    arrange(-Sum) %>% 
    mutate(End=lag(Sum), 
     xpos=1:n()-0.5, 
     Diff=End-Sum, 
     Percent=paste(round(Diff/End*100,1),"%")) %>% 
    ggplot(aes(x = reorder(key, -Sum), y = Sum)) + 
    geom_col(alpha = 0.6) + 
    stat_summary(aes(label = scales::comma(..y..)), fun.y = 'sum', 
       geom = 'text', col = 'white', vjust = 1.5) + 
    geom_segment(aes(x=xpos, y = End, xend=xpos, yend=Sum)) + 
    geom_text(aes(x=xpos,y = End-Diff/2, label=Percent),hjust=-0.2) 

enter image description here

+0

ニース各バー管理の中点に結合されたセグメントが恍惚状態になる場合は – OdeToMyFiddle

+0

xとxendをそれぞれ '... = reorder(key、-Sum)'に変更しようとしていますか? – Jimbou

+0

このスキームは有益で、ここのExcelバージョンよりも優れています。[Excelの棒グラフ](https://www.codeproject.com/articles/3371/cool-graph-object-to-plot-column-and-line-graphs) -i) – OdeToMyFiddle

関連する問題