Esse gráfico exibe uma tabela de contingência bidirecional cujos dados são aproximadamente os seguintes:
Branded Unbranded Social Referring Direct RSS
First-time... 177276 472737 88638 265915 472737 59092
Return Visits... 236002 629339 118001 354003 629339 78667
4+ Visits in ... 166514 444037 83257 249771 444037 55505
10+ Visit in ... 28782 76751 14391 43172 76751 9594
At Least One Visit... 6707 17886 3354 10061 17886 2236
Last Touch... 660 1759 330 989 1759 220
Existem inúmeras maneiras de construir esse enredo. Por exemplo, você pode calcular as posições de cada amostra retangular de cor e colocar cada amostra separadamente. Em geral, porém, ajuda a encontrar uma descrição sucinta de como um gráfico representa dados.
Como ponto de partida, podemos vê-lo como uma variação de um gráfico de barras empilhadas.
Esse gráfico dificilmente precisa de uma descrição: por familiaridade, sabemos que cada linha de retângulos corresponde a cada linha da tabela de contingência; que comprimentos dos retângulos são diretamente proporcionais às suas contagens; que eles não se sobrepõem; e que as cores correspondem às colunas da tabela.
Se convertermos esta tabela em um "quadro de dados" ou "tabela de dados" com uma linha por contagem com campos indicando o nome da linha, o nome da coluna e a contagem, plotar isso normalmente significa chamar uma função adequada e estipular onde encontrar os nomes das linhas, os nomes das colunas e as contagens. Usando uma implementação de Gramática de Gráficos (o pacote para ), isso seria algo comoXggplot2
R
ggplot(X, aes(Outcome, Count, fill=Referral)) + geom_col()
Os detalhes do gráfico, como a largura de uma linha de barras e quais cores usar, geralmente precisam ser estipulados explicitamente. Como isso é feito depende do ambiente de plotagem (e isso é relativamente pouco interessante: você só precisa procurar).
Essa implementação específica da gramática dos gráficos oferece pouca flexibilidade no posicionamento das barras. Uma maneira de produzir a aparência desejada, com o mínimo esforço, é inserir uma categoria invisível na base de cada barra para que as barras fiquem centralizadas. Um pouco de reflexão sugere que a contagem falsa necessária para centralizar cada barra deve ser a média do comprimento total da barra e a da barra mais longa. Para este exemplo, isso seria uma coluna inicial com os valores
254478.0 0.0 301115.0 897955.0 993610.5 1019817.0
Aqui está o gráfico de barras empilhadas resultante mostrando os dados falsos em cinza claro:
A figura desejada é criada tornando os gráficos da coluna falsa invisíveis:
A descrição Gramática dos gráficos do gráfico não precisa ser alterada: simplesmente fornecemos uma tabela de contingência diferente para ser renderizada de acordo com a mesma descrição (e substituímos a atribuição de cores padrão para a coluna falsa).
Comentários
Esses gráficos são honestos: a extensão horizontal de cada amostra colorida é diretamente proporcional aos dados subjacentes, sem distorção. Compará-los com o original (na pergunta) revela quão extrema é sua distorção ( fator de mentira de Tufte ).
Se desejar mostrar detalhes na parte inferior do "funil", considere representar as contagens por área, e não por comprimento. Você pode tornar os comprimentos das barras proporcionais às raízes quadradas dos comprimentos totais e suas larguras (na direção vertical) também proporcionais às raízes quadradas. Agora, a parte inferior do "funil" teria cerca de um vigésimo do comprimento mais longo, em vez de um quatrocésimo, permitindo a exibição de alguns detalhes. Infelizmente, a ggplot2
implementação não permite mapear uma variável para a largura da barra e, portanto, é necessária uma solução alternativa mais envolvente (uma que realmente descreva cada retângulo individualmente). Talvez haja uma implementação Python que seja mais flexível.
Referências
Edward Tufte, a exibição visual de informações quantitativas . Cheshire Press 1984.
Leland Wilkinson, A gramática dos gráficos. Springer 2005.