Visão geral
Um diagrama de Sankey é uma visualização usada para representar um fluxo de um conjunto de valores para outro. Os elementos conectados são chamados de nós e as conexões são chamadas de links. O Sankeys é melhor usado quando você quer mostrar um mapeamento de muitos para muitos entre dois domínios (por exemplo, universidades e grandes empresas) ou vários caminhos em um conjunto de etapas (por exemplo, o Google Analytics usa Sankeys para mostrar como o tráfego flui de páginas para outras páginas no seu site).
Para os curiosos, eles são nomeados em homenagem ao Capitão Sankey, que criou um diagrama de eficiência do motor a vapor que usava setas com larguras proporcionais à perda de calor.
Observação: o diagrama de Sankey pode estar passando por revisões substanciais em futuras versões do Google Charts.
Os diagramas de Sankey são renderizados no navegador usando SVG ou VML, o que for apropriado para o navegador do usuário. O código de layout Sankey do Google é derivado do código de layout Sankey do D3.
Observação:os diagramas de Sankey do Google não estão disponíveis no Microsoft Internet Explorer 8 e em versões anteriores.
Um exemplo simples
Suponha que você tenha duas categorias, A e B, que se conectam a três outras categorias, X, Y e Z. Algumas dessas conexões são mais pesadas do que outras. Por exemplo, B tem uma conexão fina com X e uma conexão muito mais grossa com Y.
Passe o cursor sobre um dos links para destacar a conexão.
Para criar um diagrama de Sankey, forneça um conjunto de linhas, cada uma contendo informações sobre uma conexão: de, para e peso. Em seguida, use o método google.visualization.Sankey()
para inicializar o gráfico e, em seguida, o método draw()
para renderizá-lo:
<html> <head> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <script type="text/javascript"> google.charts.load('current', {'packages':['sankey']}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'From'); data.addColumn('string', 'To'); data.addColumn('number', 'Weight'); data.addRows([ [ 'A', 'X', 5 ], [ 'A', 'Y', 7 ], [ 'A', 'Z', 6 ], [ 'B', 'X', 2 ], [ 'B', 'Y', 9 ], [ 'B', 'Z', 4 ] ]); // Sets chart options. var options = { width: 600, }; // Instantiates and draws our chart, passing in some options. var chart = new google.visualization.Sankey(document.getElementById('sankey_basic')); chart.draw(data, options); } </script> </head> <body> <div id="sankey_basic" style="width: 900px; height: 300px;"></div> </body> </html>
Observação: evite ciclos nos seus dados. Se A estiver vinculada a si mesma ou a B, que está vinculada a C que está vinculada a A, o gráfico não será renderizado.
Sankeys multinível
É possível criar um diagrama de Sankey com vários níveis de conexões:
Os diagramas de Sankey vão adicionar outros níveis conforme necessário, colocando-os automaticamente. Confira o código completo do gráfico acima:
<html> <body> <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> <div id="sankey_multiple" style="width: 900px; height: 300px;"></div> <script type="text/javascript"> google.charts.load("current", {packages:["sankey"]}); google.charts.setOnLoadCallback(drawChart); function drawChart() { var data = new google.visualization.DataTable(); data.addColumn('string', 'From'); data.addColumn('string', 'To'); data.addColumn('number', 'Weight'); data.addRows([ [ 'Brazil', 'Portugal', 5 ], [ 'Brazil', 'France', 1 ], [ 'Brazil', 'Spain', 1 ], [ 'Brazil', 'England', 1 ], [ 'Canada', 'Portugal', 1 ], [ 'Canada', 'France', 5 ], [ 'Canada', 'England', 1 ], [ 'Mexico', 'Portugal', 1 ], [ 'Mexico', 'France', 1 ], [ 'Mexico', 'Spain', 5 ], [ 'Mexico', 'England', 1 ], [ 'USA', 'Portugal', 1 ], [ 'USA', 'France', 1 ], [ 'USA', 'Spain', 1 ], [ 'USA', 'England', 5 ], [ 'Portugal', 'Angola', 2 ], [ 'Portugal', 'Senegal', 1 ], [ 'Portugal', 'Morocco', 1 ], [ 'Portugal', 'South Africa', 3 ], [ 'France', 'Angola', 1 ], [ 'France', 'Senegal', 3 ], [ 'France', 'Mali', 3 ], [ 'France', 'Morocco', 3 ], [ 'France', 'South Africa', 1 ], [ 'Spain', 'Senegal', 1 ], [ 'Spain', 'Morocco', 3 ], [ 'Spain', 'South Africa', 1 ], [ 'England', 'Angola', 1 ], [ 'England', 'Senegal', 1 ], [ 'England', 'Morocco', 2 ], [ 'England', 'South Africa', 7 ], [ 'South Africa', 'China', 5 ], [ 'South Africa', 'India', 1 ], [ 'South Africa', 'Japan', 3 ], [ 'Angola', 'China', 5 ], [ 'Angola', 'India', 1 ], [ 'Angola', 'Japan', 3 ], [ 'Senegal', 'China', 5 ], [ 'Senegal', 'India', 1 ], [ 'Senegal', 'Japan', 3 ], [ 'Mali', 'China', 5 ], [ 'Mali', 'India', 1 ], [ 'Mali', 'Japan', 3 ], [ 'Morocco', 'China', 5 ], [ 'Morocco', 'India', 1 ], [ 'Morocco', 'Japan', 3 ] ]); // Set chart options var options = { width: 600, }; // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.Sankey(document.getElementById('sankey_multiple')); chart.draw(data, options); } </script> </body> </html>
Controlar cores
Os diagramas de Sankey podem definir cores personalizadas para nós e links. Os nós e os links podem receber paletas de cores personalizadas usando as opções de colors
(sankey.node.colors
e sankey.link.colors
, respectivamente). Eles também podem receber diferentes modos de coloração usando a opção colorMode
.
Se as cores não forem personalizadas, o padrão será a paleta do Material Design padrão.
var colors = ['#a6cee3', '#b2df8a', '#fb9a99', '#fdbf6f', '#cab2d6', '#ffff99', '#1f78b4', '#33a02c']; var options = { height: 400, sankey: { node: { colors: colors }, link: { colorMode: 'gradient', colors: colors } } };
Você pode controlar as cores dos links, nós e rótulos com as opções de configuração. Aqui, selecionamos três com a mesma matiz, mas brilhos diferentes:
Veja como são essas opções:
var options = { width: 600, sankey: { link: { color: { fill: '#d799ae' } }, node: { colors: [ '#a61d4c' ], label: { color: '#871b47' } }, } };
Também é possível controlar a transparência dos links com
a opção sankey.link.color.fillOpacity
:
var options = { width: 600, sankey: { link: { color: { fill: '#d799ae', fillOpacity: 0.8 } }, node: { colors: [ '#a61d4c' ], label: { color: '#871b47' } }, } };
Para criar uma borda ao redor dos links, use
as opções sankey.link.color.stroke
e sankey.link.color.strokeWidth
:
A cor do traço pode ser especificada no formato RGB ou pelo nome em inglês.
var options = { width: 750, height: 400, sankey: { node: { colors: [ '#a61d4c' ] }, link: { color: { stroke: 'black', strokeWidth: 1 } }, } };
Personalizar rótulos
O texto em diagramas de Sankey pode ser personalizado
usando sankey.node.label.fontName
e amigos:
Esta é a estrofe de opção para o gráfico acima:
var options = { width: 600, sankey: { node: { label: { fontName: 'Times-Roman', fontSize: 14, color: '#871b47', bold: true, italic: true } } }, };
É possível ajustar a posição dos rótulos em relação aos nós com a opção sankey.node.labelPadding
:
No gráfico acima, adicionamos 30 pixels de preenchimento entre os rótulos e os nós.
var options = { width: 600, sankey: { node: { labelPadding: 30 } }, };
Como ajustar nós
É possível controlar a largura dos nós
com sankey.node.width
:
Acima, definimos a largura do nó como 2.
var options = { width: 600, sankey: { node: { width: 2 } }, };
É possível ajustar a distância entre os nós
com sankey.node.nodePadding
:
No gráfico acima, definimos sankey.node.nodePadding
como 80.
var options = { width: 900, sankey: { node: { nodePadding: 80 } }, };
Carregando
O nome do pacote google.charts.load
é "sankey"
:
google.charts.load("current" {packages: ["sankey"]});
O nome da classe da visualização é google.visualization.Sankey
:
var visualization = new google.visualization.Sankey(container);
Formato de dados
Linhas: cada linha na tabela representa uma conexão entre dois rótulos. A terceira coluna indica a intensidade dessa conexão e será refletida na largura do caminho entre os rótulos.
Columns:
Coluna 0 | Coluna 1 | Coluna 2 | ... | Coluna N (opcional) | |
---|---|---|---|---|---|
Finalidade: | Fonte | Destino | Valor | ... | Papéis opcionais |
Tipo de dados: | string | string | number | ... | |
Role: | domínio | domínio | dados | ... | |
Papéis de coluna opcionais: | Nenhum controle |
Nenhum controle |
Nenhum controle |
... |
Opções de configuração
Nome | |
---|---|
forceIFrame |
Desenha o gráfico dentro de um frame inline. No IE8, essa opção é ignorada. Todos os gráficos do IE8 são desenhados em i-frames. Tipo: booleano
Padrão:false
|
height |
Altura do gráfico, em pixels. Tipo: número
Padrão:altura do elemento contêiner
|
sankey.iterations |
Com Sankey multinível, às vezes, não é óbvio onde os nós precisam ser colocados para melhor
legibilidade. Os experimentos do mecanismo de layout D3 com diferentes layouts de nó são interrompidos quando
Tipo: inteiro
Padrão:32
|
sankey.link |
Controla os atributos das conexões entre os nós. Atualmente, todos os atributos pertencem a cor: sankey: { link: { color: { fill: '#efd', // Color of the link. fillOpacity: 0.8, // Transparency of the link. stroke: 'black', // Color of the link border. strokeWidth: 1 // Thickness of the link border (default 0). }, colors: [ '#a6cee3', // Custom color palette for sankey links. '#1f78b4', // Nodes will cycle through this palette '#b2df8a', // giving the links for that node the color. '#33a02c' ] } } Tipo: objeto
Padrão:nulo
|
sankey.link.colorMode |
Define um modo de coloração para os vínculos entre os nós. Valores possíveis:
Essa opção substitui sankey.link.color. Tipo: string
Padrão: 'none'
|
sankey.node |
Controla os atributos dos nós (as barras verticais entre os links): sankey: { node: { label: { fontName: 'Times-Roman', fontSize: 12, color: '#000', bold: true, italic: false }, interactivity: true, // Allows you to select nodes. labelPadding: 6, // Horizontal distance between the label and the node. nodePadding: 10, // Vertical distance between nodes. width: 5, // Thickness of the node. colors: [ '#a6cee3', // Custom color palette for sankey nodes. '#1f78b4', // Nodes will cycle through this palette '#b2df8a', // giving each node its own color. '#33a02c' ] } } Tipo: objeto
Padrão:nulo
|
sankey.node.colorMode |
Define um modo de coloração para os nós Sankey. Valores possíveis:
Tipo: string
Padrão: 'unique'
|
dica |
Um objeto com membros para configurar vários elementos de dica. Para especificar as propriedades desse objeto, use a notação literal de objeto, como mostrado aqui: {textStyle: {color: '#FF0000'}, showColorCode: true} Tipo: objeto
Padrão:nulo
|
tooltip.isHtml |
Se definida como verdadeira, use dicas renderizadas em HTML (em vez de renderizadas em SVG). Consulte Como personalizar o conteúdo da dica para mais detalhes. Observação:a personalização do conteúdo da dica HTML pelo papel de dados da coluna de dicas não é compatível com a visualização do gráfico de bolhas. Tipo: booleano
Padrão:false
|
tooltip.textStyle |
Um objeto que especifica o estilo do texto da dica. O objeto tem este formato: { color: <string>, fontName: <string>, fontSize: <number>, bold: <boolean>, italic: <boolean> }
O Tipo: objeto
Padrão:
{color: 'black', fontName: <global-font-name>, fontSize: <global-font-size>}
|
width |
Largura do gráfico, em pixels. Tipo: número
Padrão:largura do elemento que o contém
|
Métodos
Método | |
---|---|
draw(data, options) |
Desenha o gráfico. O gráfico aceita outras chamadas de método somente depois que o evento Return Type: nenhum
|
getBoundingBox(id) |
Retorna um objeto que contém as informações de esquerda, parte superior, largura e altura do elemento
Os valores são relativos ao contêiner do gráfico. Chame essa função depois que o gráfico for desenhado. Tipo de retorno: objeto
|
getSelection() |
Retorna uma matriz das entidades de gráfico selecionadas.
As entidades selecionáveis são barras, entradas de legenda e categorias.
Neste gráfico, apenas uma entidade pode ser selecionada por vez.
Tipo de retorno:matriz de elementos de seleção
|
setSelection() |
Seleciona as entidades de gráfico especificadas. Cancela qualquer seleção anterior.
As entidades selecionáveis são barras, entradas de legenda e categorias.
Neste gráfico, apenas uma entidade pode ser selecionada por vez.
Return Type: nenhum
|
clearChart() |
Limpa o gráfico e libera todos os recursos alocados. Return Type: nenhum
|
Eventos
Nome | |
---|---|
error |
Disparado quando ocorre um erro ao tentar renderizar o gráfico. Properties:ID, message
|
onmouseover |
Disparado quando o usuário passa o mouse sobre uma entidade visual. Transmite os índices de linha e coluna do elemento da tabela de dados correspondente. Uma barra correlaciona-se a uma célula na tabela de dados, uma entrada de legenda para uma coluna (o índice de linha é nulo) e uma categoria a uma linha (o índice da coluna é nulo). Propriedades: linha, coluna
|
onmouseout |
Disparado quando o usuário afasta o mouse de uma entidade visual. Transmite os índices de linha e coluna do elemento da tabela de dados correspondente. Uma barra correlaciona-se a uma célula na tabela de dados, uma entrada de legenda para uma coluna (o índice de linha é nulo) e uma categoria a uma linha (o índice da coluna é nulo). Propriedades: linha, coluna
|
ready |
O gráfico está pronto para chamadas de métodos externos. Se você quiser interagir com o gráfico e chamar métodos depois de desenhá-lo, configure um listener para esse evento antes de chamar o método Properties:nenhuma
|
select |
Disparado quando o usuário clica em uma entidade visual. Para saber o que foi selecionado, chame
Properties:nenhuma
|
Política de dados
Todos os códigos e dados são processados e renderizados no navegador. Nenhum dado é enviado para nenhum servidor.