web-dev-qa-db-fra.com

légende de position d'un graphique à barres empilées

J'essaie de créer un graphique à barres empilées, mais je ne peux pas positionner la légende de sorte qu'elle ne chevauche aucune des barres. J'ai essayé d'ajuster les marges, de définir xlim, d'utiliser une instruction legend distincte et de chercher ici, le tout sans succès. En effet, le code de l'exemple de jeu de données provenait de StackOverflow. J'utilise la base R et je préfère une solution de base R. Merci pour tout conseil.

setwd('c:/users/mmiller21/simple R programs/')

jpeg(filename = "barplot.jpeg")

set.seed(1234)
x <- replicate(8, round(10 * rexp(2000, 10)))
y <- apply(x, 2, function(column) table(factor(column, levels = 0:9)))
colnames(y) <- paste('A', seq(1,ncol(y),1), sep='')
rownames(y) <- paste('R', seq(1,nrow(y),1), sep='')
y

#      A1  A2  A3  A4  A5  A6  A7  A8
# R1  769 800 790 806 792 787 834 801
# R2  779 733 793 757 786 744 731 776
# R3  284 297 278 272 263 301 280 275
# R4  112 106  91 124 106 103 104  96
# R5   33  38  37  26  36  37  30  36
# R6   11  18   7  11  10  20  11   9
# R7    8   8   3   2   3   3   9   5
# R8    4   0   1   2   4   4   0   2
# R9    0   0   0   0   0   1   1   0
# R10   0   0   0   0   0   0   0   0

par(mfrow=c(1, 1), mar=c(5, 5, 4, 2) + 0.1)
barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE, 
        args.legend = list(x = "topright", bty = "n"))

dev.off()

enter image description here

20
Mark Miller

Que dis-tu de ça:

library(RColorBrewer)

barplot(
    y,
    xlim=c(0, ncol(y) + 3),
    col=brewer.pal(nrow(y), "Paired"),
    ylab="My Variables",
    legend.text=TRUE,
    args.legend=list(
      x=ncol(y) + 3,
      y=max(colSums(y)),
      bty = "n"
    )
)

enter image description here

16
zero323

Avec marges

par(mfrow=c(1, 1), mar=c(5, 5, 4, 8))
barplot(y, col = 1:nrow(y), ylab="My Variables", legend.text = TRUE, 
        args.legend = list(x = "topright", bty = "n", inset=c(-0.15, 0)))
8
P̲̳x͓L̳

Juste pour le plaisir, le voici en ggplot2, sans légende superposée.

set.seed(1234)
x <- replicate(8, round(10 * rexp(2000, 10)))
y <- apply(x, 2, function(column) table(factor(column, levels = 0:9)))
y <- as.data.frame(y)
colnames(y) <- paste('A', seq(1,ncol(y),1), sep='')
rownames(y) <- paste('R', seq(1,nrow(y),1), sep='')

library(ggplot2)
library(reshape)
y$ID <- rownames(y)
y.melt <- melt(y, id.var = 'ID')

y.melt <- within(y.melt, ID <- factor(ID, 
    c('R10','R9','R8','R7','R6','R5','R4','R3','R2','R1'), 
    ordered = TRUE))

ggplot(y.melt, aes(x = variable, y = value, fill = ID)) +
    geom_bar(stat = 'identity') +
    xlab("") +
    ylab("My variable") +
    theme(legend.title=element_blank())

bar chart

6
SlowLearner