Mosaico em visualização de dados: o que é e como fazer funcionar
Todo mundo que trabalha com dados tabelados já se deparou com a necessidade de mostrar a distribuição de duas ou mais variáveis categóricas de uma só vez. A primeira opção que vem à cabeça costuma ser a tabela de contingência, mas tabelas não são visualização. O mosaico resolve esse problema. Ele representa células de uma tabela cruzada como retângulos, onde a área de cada retângulo é proporcional à frequência observada naquele grupo. A estrutura básica é simples. Para cada combinação das categorias de duas variáveis, você calcula a proporção no total e divide o espaço horizontal e vertical proporcionalmente. O resultado parece um piso ou uma parede revestida, mas com informações reais por trás de cada pedacinho. A leitura direta é: retângulos maiores significam grupos mais frequentes na amostra.
O que é um mosaico na prática de análise
Se você está tentando entender o que é um mosaico fora do contexto artístico ou de design, a resposta curta é que ele é uma ferramenta de visualização para tabelas de contingência com variáveis categoricas. Em português técnico, também aparece como gráfico de mosaico, diagrama de mosaico ou simplesmente mosaico estatístico. Existem variações que muita gente desconhece. O mosaico padrão mostra apenas frequências. Mas há o modelo com ajuste por Pearson, onde os retângulos ganham cores baseadas em resíduos padronizados, indicando desvios significativos entre o observado e o esperado. Isso transforma o gráfico em algo que sinaliza quais combinações de variáveis têm comportamento diferente do que se seria estatisticamente normal.
Também existe a versão com barras internas dentro dos retângulos, que permite inserir uma terceira variável ou exibir intervalos de confiança. O gráfico deixa de ser apenas descritivo e passa a ter camada inferencial, o que é útil quando o objetivo não é só mostrar, mas testar hipóteses visuais antes de rodar testes formais. Eu montei um mosaico recentemente para um cliente que queria comparar a taxa de cancelamento por região e tipo de plano em um contrato de SaaS. Usei Python com a biblioteca matplotlib e seaborn. O resultado visual ficou claro, mas o problema foi quando o cliente pediu para adicionar uma terceira dimensão: faixa etária. O gráfico original ficou ilegível porque a subdivisão criou retângulos muito pequenos com cores parecidas. A solução que funcionou foi gerar três gráficos separados, cada um para uma faixa etária, mantendo região e plano nas dimensões principais, e usar a escala de cor para indicar o tamanho relativo de cada grupo. Isso cortou o tempo de interpretação de quase uma hora para cerca de quinze minutos na apresentação.
Como construir um mosaico passo a passo
O processo tem etapas previsíveis, mas cada etapa tem armadilhas que só aparecem depois da primeira vez que você erra. Vou listar da forma que eu sigo hoje, depois da minha experiência acumulada.
Passo 1: preparar os dados
Você precisa de dados no formato tabular com pelo menos duas variáveis categóricas. Se seus dados vierem crus, com valores ausentes ou categorias com frequência muito baixa, normalize antes. Categorias com menos de cinco observações tendem a distorcer a proporção dos retângulos sem trazer informação relevante. O trabalho real aqui é limpar e consolidar, não formatar para o gráfico.
Passo 2: gerar a tabela de contingência
No R, a função table() faz isso rapidamente. No Python, você usa pandas.crosstab() ou pd.pivot_table(). Se houver uma terceira variável que você quer usar como peso, inclua-a no cálculo da tabela, senão a frequência absoluta vai enganar a leitura porque retângulos pequenos podem representar grupos grandes se a ponderação estiver errada.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Passo 3: plotar o mosaico
Em R, o pacote vcd é o padrão. A função mosaic() recebe a tabela e o argumento shade = TRUE para habilitar cores baseadas em resíduos. Também é comum usar gplots::mosaicplot(), mas ela é mais limitada em personalização. No Python, statsmodels.graphics.mosaicplot.mosaic() funciona bem para casos básicos. Para controle fino, eu costumo montar manualmente com matplotlib.patches.Rectangle, calculando as coordenadas a partir das proporções acumuladas.
Passo 4: interpretar com cuidado
O erro mais frequente é olhar para o tamanho do retângulo e concluir que um grupo é mais relevante sem considerar a linha ou coluna de referência. O tamanho da área depende tanto da variável horizontal quanto da vertical. Para validar a leitura, meço sempre a proporção relativa dentro de cada fatia. Isso leva alguns segundos a mais, mas evita conclusões equivocadas que aparecem em reuniões com stakeholder.
Pegadinhas comuns e quando não usar mosaico
Mosaico não é universal. Ele falha quando você tem mais de três variáveis significativas. A leitura visual fica praticamente impossível porque o cérebro não consegue decompor áreas aninhadas em mais de duas dimensões de forma confiável. Nesse caso, prefira uma tabela de contingência colorida ou um gráfico de barras empilhadas com percentuais. Outro problema é a escolha de cores. Escalas divergentes funcionam bem para resíduos, mas exigem legenda clara. Sem legenda, o gráfico vira decoreba. Eu já vi relatórios onde a escala ia de azul a vermelho sem indicar qual extremos significava positivo ou negativo. O time de produto interpretou ao contrário e perdeu duas semanas em uma decisão de pricing.
Existe ainda o problema de sobreposição de rótulos. Quando as categorias são longas, o texto dentro dos retângulos se cruza. A solução prática é posicionar os rótulos fora dos retângulos e conectar com linhas finas, ou simplesmente reduzir o tamanho da fonte para algo entre 7 e 9 pontos, dependendo do tamanho da figura final.
Alternativas rápidas para comparação
Se o seu objetivo é apenas mostrar frequências absolutas de duas variáveis, uma tabela com totalizadores pode ser mais honesta. Gráficos sempre envolvem escolhas visuais que podem simplificar demais a realidade. Se você precisa mostrar a mesma informação com menos ambiguidade, um gráfico de agrupamento por porcentagem ou um heatmap de contagem costuma transmitir o dado com mais precisão para públicos não técnicos. Para quem já domina mosaico e quer ir além, existe a possibilidade de incorporar resíduos em uma matriz de calor separada e lado a lado. Assim o analista vê a estrutura principal no mosaico e a significância estatística no heatmap. O custo de produção sobe, mas a clareza da mensagem também sobe junto.
Resumo objetivo sobre o que é um mosaico
Um mosaico é uma representação gráfica de uma tabela de contingência em que a área de cada retângulo reflete a frequência ou proporção de uma combinação de categorias. Ele funciona bem para duas a três variáveis, permite identificar padrões visuais rapidamente e ganha valor quando acompanhado de resíduos estatísticos. Não funciona bem com muitas categorias, com dados desbalanceados extremos ou quando o público não está acostumado com leitura de áreas comparativas. A curva de aprendizado inicial é baixa, mas o domínio da interpretação leva tempo porque o olho humano naturalmente confunde largura com intensidade, e isso gera conclusões erradas se você não treinar a leitura correta. Se você quiser começar, use R com o pacote vcd e teste com dados simples primeiro. Se preferir Python, comece com statsmodels e, quando sentir que precisa de mais controle, migre para matplotlib com cálculo manual das coordenadas. A biblioteca em si não é o diferencial. O diferencial é saber quando a mensagem visual ajuda e quando ela atrapalha.