Gráfico de matriz de dispersão de correlação com tamanho de ponto diferente (em R)

StackOverflow https://stackoverflow.com/questions/2593643

  •  25-09-2019
  •  | 
  •  

Pergunta

Acabei de chegar em uma cruz esse belo código isso torna este gráfico de matriz de dispersão:

alt text
(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)
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top