Dessiner plusieurs diagrammes à barres sur un graphique en R [fermé]

12

Je voudrais tracer quatre diagrammes à barres sur un seul graphique en R. J'ai utilisé le code suivant. Ici, comment garder une légende en haut du graphique, en particulier la légende doit être comprise entre 2 et 3 graphiques à barres. J'ai aussi essayé avec par(mar=c(4.1,4.1,8.1,4.1)mais il n'y a pas de succès. De plus, j'ai aussi essayé de courir legend()après le deuxième barplot, mais ça ne sert à rien. La légende concerne les quatre barplots. S'il vous plait aidez moi avec ceci.

    par(mfrow=c(1,4))
    barplot(t(A), beside=T, ylim=c(-100,100),..)
    barplot(t(B), beside=T, ylim=c(-100,100),..)
    barplot(t(C), beside=T, ylim=c(-100,100),..)
    barplot(t(D), beside=T, ylim=c(-100,100),..)
    legend(...)
samarasa
la source
1
Quelqu'un marque cela avec R
Brandon Bertelsen
@Kevin Ceci est un Q valide ici; le fait que R ait une interface en ligne de commande ne signifie pas qu'une question R est une question de programmation.
@Brandon Sure; vous pouvez utiliser les modifications suggérées à l'avenir, vous gagnerez également 2 répétitions pour la suggestion acceptée.

Réponses:

17

La réponse du Dr Mike est bonne, mais je pensais fournir des solutions qui tirent parti des fonctionnalités de facettage (ou de palissage) de ggplot2et lattice. Préparez d'abord légèrement les données:

mydata$id <- 1:nrow(mydata)
dat <- melt(mydata,id.vars = "id")

puis nous pouvons faire ce qui suit dans ggplot2:

ggplot(dat,aes(x=factor(id), y = value)) + 
    facet_wrap(~variable) +
    geom_bar(aes(fill = factor(id)))

entrez la description de l'image ici

et en utilisant lattice:

barchart(~value|variable,group = factor(id),data=dat,
         key = simpleKey(text = as.character(1:5),
                rectangles = TRUE,points = FALSE,space = "right"))

entrez la description de l'image ici

joran
la source
@Brandon - C'est ma nouvelle mission. Ces questions sont de meilleures références pour d'autres si elles contiennent des exemples de base, ggplot2 et lattice.
joran
@Joran: Fantastique.
samarasa
Comment renommer le label sur "factor (id)" dans la version ggplot?
News_is_Selection_Bias
11

Je pense que la solution la plus simple consiste à utiliser les capacités inhérentes à la commande barplot pour résoudre votre problème. Le code suivant fait ce que j'interprète que vous voulez faire.

mydata <- data.frame(Barplot1=rbinom(5,16,0.6), Barplot2=rbinom(5,16,0.25),
                     Barplot3=rbinom(5,5,0.25), Barplot4=rbinom(5,16,0.7))
barplot(as.matrix(mydata), main="Interesting", ylab="Total", beside=TRUE, 
        col=terrain.colors(5))
legend(13, 12, c("Label1","Label2","Label3","Label4","Label5"), cex=0.6, 
       fill=terrain.colors(5))

terrain

J'espère que ça répond à ta question.

Dr. Mike
la source