Assocplot

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Donato Cereghetti
Messages : 10
Enregistré le : 06 Mar 2008, 21:05

Assocplot

Messagepar Donato Cereghetti » 06 Jan 2009, 11:09

Bonjour à tout le monde!

je un problème avec le diagramme d'association suivant:

Image

Il me manquent deux désignation (la première entre "couple avec enfant(s)" - "ménage non familiaux" et la deuxième entre "sans conféssion" et "catholique"). Cela est du au fait que la taille des labels est trop grande.


Est-ce que quelcun sait comment la réduire?

Merci d'avance

Donato Cereghetti

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 06 Jan 2009, 11:21

Bonjour,

a priori il te faudra modifier le code de la fonction assocplot et permettre de modifier la taille des labels de tes axes :

Code : Tout sélectionner

assocplot2 <- function(x, col = c("black", "red"), space = 0.3,
                      main = NULL, xlab = NULL, ylab = NULL,cex.axis=1)
{
    if(length(dim(x)) != 2)
        stop("'x' must be a 2-d contingency table")
    if(any(x < 0) || any(is.na(x)))
        stop("all entries of 'x' must be nonnegative and finite")
    if((n <- sum(x)) == 0)
        stop("at least one entry of 'x' must be positive")
    if(length(col) != 2)
        stop("incorrect 'col': must be length 2")

    f <- x[ , rev(1L:NCOL(x))]           
    e <- outer(rowSums(f), colSums(f), "*") / n
    d <- (f - e) / sqrt(e)             
    e <- sqrt(e)
    x.w <- apply(e, 1L, max)             
    y.h <- apply(d, 2L, max) - apply(d, 2L, min)
    x.delta <- mean(x.w) * space
    y.delta <- mean(y.h) * space
    xlim <- c(0, sum(x.w) + NROW(f) * x.delta)
    ylim <- c(0, sum(y.h) + NCOL(f) * y.delta)
    plot.new()
    plot.window(xlim, ylim, log = "")
    x.r <- cumsum(x.w + x.delta)
    x.m <- (c(0, x.r[-NROW(f)]) + x.r) / 2
    y.u <- cumsum(y.h + y.delta)
    y.m <- y.u - apply(pmax(d, 0), 2L, max) - y.delta / 2
    z <- expand.grid(x.m, y.m)
    rect(z[, 1] - e / 2, z[, 2],
         z[, 1] + e / 2, z[, 2] + d,
         col = col[1 + (d < 0)])
    axis(1, at = x.m, labels = rownames(f), tick = FALSE,cex.axis=cex.axis) # axe des x
    axis(2, at = y.m, labels = colnames(f), tick = FALSE,cex.axis=cex.axis)
    abline(h = y.m, lty = 2) # axe des y
    ndn <- names(dimnames(f))
    if(length(ndn) == 2L) {
        if(is.null(xlab))
            xlab <- ndn[1L]
        if(is.null(ylab))
            ylab <- ndn[2L]
    }
    title(main = main, xlab = xlab, ylab = ylab)
}


Après tu peux aussi rajouter un autre paramètre pour différencier l'axes des abscisses de l'axe des ordonnées.

Maxime

Donato Cereghetti
Messages : 10
Enregistré le : 06 Mar 2008, 21:05

Messagepar Donato Cereghetti » 06 Jan 2009, 13:10

Ton code est vraiment formidable!!!! En modifiant les deux paramètres, on arrive à un affichage optimale.

Merci beaucoup.

Donato Cereghetti

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 06 Jan 2009, 13:51

Petite précision ce n'est pas mon code mais le code originel de la fonction assocplot de la library graphics auquel j'ai juste rajouté le paramètre cex.axis.

https://svn.r-project.org/R/trunk/src/library/graphics/R/assocplot.R

Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité