2 votes

Ajout d'une légende personnalisée à fourfold()

Quelqu'un sait-il comment ajouter des légendes personnalisées à fourfold() à partir du paquet vcd ?

Je peux ajouter à fourfoldplot() en base en utilisant la fonction legend(), mais je veux utiliser les couleurs personnalisées pour OR1.0 et OR1.0 qui sont fournies avec fourfold().

Lorsque je crée un graphique à l'aide de fourfold() et que j'essaie ensuite d'ajouter une légende à l'aide de legend(), j'obtiens l'erreur suivante...

Erreur dans strwidth(legend, units = "user", cex = cex, font = text.font) :

plot.new n'a pas encore été appelé

Voici un exemple :

# install.packages("vcd")
library(vcd)

x<-matrix(c(1146,210,471,897,
            669,687,809,559,
            761,595, 1030,338,
            1227,129,1306,62,
            844,737,773,370,
            1134,447,344,799,
            1001,580,790,353,
            1461,120,1072,71,
            820,837,797,270,
            866,791,612,455, 
            1370,287,421,646, 
            1583,74,950,117, 
            1462,1056,155,51, 
            1349,1169,129,77,
            1688,830,103,103, 
            2419,99,114,92),ncol=8,nrow=8)
x
x<-as.table(x)
x<-as.data.frame(x)

xarray<-array(x$Freq, dim=c(2,2,16))
xarray<-aperm(xarray,c(2,1,3))
dimnames(xarray)[[1]] <- c("No", "Yes")
dimnames(xarray)[[2]] <- c("No", "Yes")
dimnames(xarray)[[3]] <- c("Morning:Morning","Morning:Afternoon","Morning:Evening","Morning:Night-time",
                                 "Afternoon:Morning","Afternoon:Afternoon","Afternoon:Evening","Afternoon:Night-time",
                                 "Evening:Morning","Evening:Afternoon","Evening:Evening","Evening:Night-time",
                                 "Night-time:Morning","Night-time:Afternoon","Night-time:Afternoon","Night-time:Night-time")
names(dimnames(xarray)) <- c("Post", "Pre", "Time of day")

fourfold(xarray, c("#99CCFF", "#6699CC", "#999999", "#E69F00", "#56B4E9", "#009E73"), ticks = 0.25,
         main = "Did you usually train in the morning, afternoon, evening or night-time?", p_adjust_method="bon") 

legend("right",legend = c("Non Sig.","Sig"), fill = c("#E69F00", "#009E73"))

0voto

StupidWolf Points 34348

fourfold se fait sur grille , legend() ne fonctionne pas. Vous pouvez essayer d'utiliser grid_legend() de vcd :

library(vcd)

png("test.png",width=800,height=600)

fourfold(xarray, c("#99CCFF", "#6699CC", "#999999", "#E69F00", "#56B4E9", "#009E73"), 
ticks = 0.25,
main = "Did you usually train in the morning, afternoon, evening or night-time?", 
p_adjust_method="bon") 

grid_legend(0.9, 0.5, c(15, 15), c("#E69F00", "#009E73"),
c("Non Sig.","Sig"))
dev.off()

Dans la fonction grid_legend(), les deux premiers arguments sont x et y, ce qui correspond à la position relative de la légende sur le dispositif de traçage. Ainsi, 0,9 correspondrait à 90 % à droite et 0,5 au milieu, en hauteur.

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X