3 votes

ggplot2 : positionnement des marques de contrôle sur un graphique à quatre quadrants le long des axes centraux (c'est-à-dire x=0, y=0) au lieu du bord de la zone de traçage

J'essaie d'ajuster la position des marques de contrôle sur mon tracé afin qu'elles se trouvent le long de l'axe et non sur le périmètre du tracé (ce qui est le cas par défaut). J'ai essayé d'utiliser la fonction axis.ticks argument au sein de ggplot2 et cela n'a pas fonctionné. Voici quelques exemples de données et le code nécessaire pour produire le graphique avec lequel je travaille :

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
                  v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))
p = ggplot()
p + geom_point(aes(dat$v1, dat$v2) ,shape = 21, size = 3) + 
  geom_vline(xintercept = 0, linetype = "dashed") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  theme_bw()

Veuillez me conseiller sur les paquets, fonctions ou arguments qui peuvent être utilisés pour déplacer les repères sur les axes au lieu des bords extérieurs de la zone graphique.

1voto

M. Viking Points 719

Rapprocher le commentaire de @user20650 qui fait le lien avec Déplacement des axes x ou y avec les étiquettes à cocher au milieu d'un seul ggplot (sans facettes) qui partage @baptiste y @user73708 Les fonctions de l'entreprise. J'ai enlevé tes lignes pointillées, et déplacé les données et l'aes vers l'appel ggplot.

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
                  v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))

shift_axis_y <- function(p, y=0){
  g <- ggplotGrob(p)
  dummy <- data.frame(y=y)
  ax <- g[["grobs"]][g$layout$name == "axis-b"][[1]]
  p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(y=1, height=sum(ax$height))), 
                        ymax=y, ymin=y) +
    geom_hline(aes(yintercept=y), data = dummy) +
    theme(axis.text.x = element_blank(), 
          axis.ticks.x=element_blank())
}

shift_axis_x <- function(p, x=0){
      g <- ggplotGrob(p)
      dummy <- data.frame(x=x)
      ax <- g[["grobs"]][g$layout$name == "axis-l"][[1]]
      p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(x=1, width = sum(ax$height))), 
                            xmax=x, xmin=x) +
        geom_vline(aes(xintercept=x), data = dummy) +
        theme(axis.text.y = element_blank(), 
              axis.ticks.y=element_blank())
    }

p <- ggplot(dat, aes(v1, v2)) + 
  geom_point(shape = 21, size = 3) + 
  theme_bw()

p<-shift_axis_y(p, y=0)
p<-shift_axis_x(p, x=0)
p

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