web-dev-qa-db-fra.com

Ajouter une bordure de panneau à ggplot2

On m'a demandé de placer une bordure complète autour de ma parcelle ci-dessous:

enter image description here

L'utilisation de panel.border = element_rect(colour = "black") entraîne la perte de la parcelle.

Je ne peux pas utiliser theme_bw() car il n'a pas la même fonctionnalité que le thème habituel, le code que j'utilise actuellement est ci-dessous:

graph<-ggplot(d,aes(x=d$AOE, y=d$MEI)
            )+
  geom_point(shape=20, size=3)+
  geom_rug()+
  annotate("text", x = -1.1, y = 14000, label = "27/04/2011") +
  annotate("text", x = -1.3, y = 10400, label = "03/04/1974") +
  xlab("MEI")+
  ylab("AOE")+
  scale_y_log10()+
  theme(axis.text.y   = element_text(size=14),
        axis.text.x   = element_text(size=14),
        axis.title.y  = element_text(size=14),
        axis.title.x  = element_text(size=14),
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black")
  )

graph 

Tout conseil sur la façon d'obtenir une bordure noire complète serait très apprécié!

36
Methexis

Utiliser panel.border vous devez également spécifier un remplissage vierge en utilisant fill=NA.

Essaye ça:

library(ggplot2)

ggplot(mtcars, aes(mpg, disp)) + geom_point() + geom_rug() +
  theme(axis.text.y   = element_text(size=14),
        axis.text.x   = element_text(size=14),
        axis.title.y  = element_text(size=14),
        axis.title.x  = element_text(size=14),
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        panel.border = element_rect(colour = "black", fill=NA, size=5)
  )

enter image description here

47
Andrie

Vous pouvez utiliser theme_bw() et theme() ensemble. Cela devrait fonctionner:

# creating some data
set.seed(1)
d <- data.frame(MEI=rnorm(100), AOE=rlnorm(100, 10, 5))

# creating the plot
ggplot(d,aes(x=MEI, y=AOE)) +
  geom_point(shape=20, size=3) +
  geom_rug() +
  scale_y_log10() +
  theme_bw() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_rect(colour = "black", size=4))

cela donne: enter image description here


Une solution sans theme_bw() et inspirée de @Andrie, mais avec l'utilisation de panel.background Au lieu de panel.border:

ggplot(d,aes(x=MEI, y=AOE)) +
  geom_point(shape=20, size=3) +
  geom_rug() +
  scale_y_log10() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_rect(colour = "black", size=4, fill=NA))

cela donnera exactement le même complot. La différence entre panel.background Et panel.border Est que panel.background Est tracé sous le graphique et que panel.border Est tracé au-dessus de celui-ci.

15
Jaap