Gráfico de matriz de dispersão de correlação com tamanho de ponto diferente (em R)
-
25-09-2019 - |
Pergunta
Acabei de chegar em uma cruz esse belo código isso torna este gráfico de matriz de dispersão:
(fonte: grátis.fr)
E queria implementá-lo em variáveis de escala likret (números inteiros de 1 a 5), fazendo com que os tamanhos/cores dos pontos (no triângulo inferior) difiram de acordo com quantas opções desse tipo ocorrem (como o efeito que o jitter pode ter me dado ).
Alguma idéia de como fazer isso no mecanismo de plotagem básico?
Atualizar:
Fiz a seguinte função, mas não sei como fazer com que a escala dos pontos fique sempre "boa", o que acham?
panel.smooth2 <- function (x, y, col = par("col"), bg = NA, pch = par("pch"),
cex = 1, col.smooth = "red", span = 2/3, iter = 3, ...)
{
require(reshape)
z <- merge(data.frame(x,y), melt(table(x ,y)),sort =F)$value
z <- z/ (4*max(z))
symbols( x, y, circles = z,#rep(0.1, length(x)), #sample(1:2, length(x), replace = T) ,
inches=F, bg="blue", fg = bg, add = T)
# points(x, y, pch = pch, col = col, bg = bg, cex = cex)
ok <- is.finite(x) & is.finite(y)
if (any(ok))
lines(stats::lowess(x[ok], y[ok], f = span, iter = iter),
col = col.smooth, ...)
}
a1 <- sample(1:5, 100, replace = T)
a2 <- sample(1:5, 100, replace = T)
a3 <- sample(1:5, 100, replace = T)
aa <- data.frame(a1,a2,a3)
pairs(aa , lower.panel=panel.smooth2)
Solução
Você pode usar 'símbolos' (análogo aos métodos 'lines', 'abline' et al.)
Este método lhe dará controle refinado sobre o tamanho e a cor dos símbolos em uma única linha de código.
Usando 'símbolos' você pode definir o tamanho, cor e forma do símbolo.A forma e o tamanho são definidos passando um vetor para o tamanho de cada símbolo e vinculando-o a 'círculos', 'quadrados', 'retângulos' ou 'estrelas', por exemplo, 'estrelas' = c(4, 3, 5, 1).A cor é definida com 'bg' e/ou 'fg'.
symbols( x, y, circles = circle_radii, inches=1/3, bg="blue", fg=NULL)
Se entendi a segunda parte da sua pergunta, você deseja ter certeza razoável de que a função usada para dimensionar os símbolos em seu gráfico o faz de maneira significativa.A função 'símbolos' dimensiona (por exemplo) o raios de círculos com base em valores em uma variável 'z' (ou coluna data.frame, etc.) Na linha abaixo, defino o tamanho máximo do símbolo (raio) como 1/3 polegada - cada símbolo, exceto o maior, tem um raio alguma fração menor, dimensionado pela proporção do valor desse ponto de dados sobre o valor maior.do que aquele em proporção a Esta é uma boa escolha?Não sei - parece-me que o diâmetro ou a circunferência em particular podem ser melhores.De qualquer forma, é uma mudança trivial.Em suma, 'símbolos' com 'círculos' passados irão dimensionar os raios dos símbolos em proporção à coordenada 'z' - provavelmente mais adequados para variáveis contínuas.Eu usaria color ('bg') para variáveis/fatores discretos.
Uma maneira de usar 'símbolos' é chamar sua função de plotagem e passar type='n' que cria o objeto de plotagem, mas suprime o desenho dos símbolos para que você possa desenhá-los com a função 'símbolos' a seguir.
Eu não recomendaria 'cex' para esse propósito.'cex' é um fator de escala tanto para o tamanho do texto quanto para o tamanho dos símbolos, mas qual desses dois elementos do gráfico ele afeta depende de quando você o passa - se você defini-lo como 'par', ele atua na maior parte do texto que aparece na trama;se você configurá-lo na função 'plot', isso afetará o tamanho dos símbolos.
Outras dicas
Claro, basta usar cex
:
set.seed(42)
DF <- data.frame(x=1:10, y=rnorm(10)*10, z=runif(10)*3)
with(DF, plot(x, y, cex=z))
o que fornece tamanhos de círculo variados.A cor pode ser simplesmente uma quarta dimensão.