2
votes

Comment supprimer les étiquettes de graduation dans un ggplot sans affecter la taille du tracé?

Je souhaite afficher les ggplots associés ensemble, avec des axes tous de la même taille, mais avec certains graphiques affichant les étiquettes de graduation des axes et d'autres graphiques masquant les étiquettes de graduation des axes. Le code ci-dessous montre deux façons dont j'ai supprimé les étiquettes de graduation, mais les deux redimensionnent les tracés:

library(tidyverse)
library(cowplot)

tb <- tibble(a = 1:5, b = 1:5)

without_x_title <- ggplot(tb, aes(a,b)) +
  geom_point() +
  labs(x = "")

without_x_title_labels_1 <- ggplot(tb, aes(a,b)) +
  geom_point() +
  labs(x = "") +
  scale_x_discrete(labels = "")

without_x_title_labels_2 <- ggplot(tb, aes(a,b)) +
  geom_point() +
  labs(x = "") +
  theme(axis.text.x = element_blank())

ggdraw() +
  draw_plot(without_x_title, x = 0, y = 0, width = 0.3, height = 1) +
  draw_plot(without_x_title_labels_1, x = 0.3, y = 0, width = 0.3, height = 1) +
  draw_plot(without_x_title_labels_2, x = 0.6, y = 0, width = 0.3, height = 1)

Y a-t-il un moyen d'éviter que cela se produise?

Ceci est un suite à une question similaire sur la suppression des étiquettes d'axe posées ici . Je sais que je peux truquer un correctif en modifiant la hauteur et la position dans l'appel à ggdraw, mais j'aimerais un correctif qui fonctionne sur les ggplots. Comme pour la question précédente, j'imagine que c'est un problème courant, mais je n'ai pas été en mesure de trouver une solution là-bas.


2 commentaires

Oups, mal interprété comme "ticks", cela fera: theme (axis.text = element_blank ())


@ Mako212 Cela supprime le texte (comme dans l'exemple) mais provoque également le redimensionnement du tracé, ce que je veux éviter


3 Réponses :


1
votes

Vous pouvez utiliser le patchwork package - disponible sur github

# install.packages("devtools")
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
without_x_title + without_x_title_labels_1 + without_x_title_labels_2

 entrez la description de l'image ici


1 commentaires

Merci @markus, cela fonctionne, mais pour autant que je sache, patchwork manque de fonctionnalités que je souhaite utiliser avec ggdraw. Par exemple, avec ggdraw, je peux ajouter et positionner des lettres de panneau sur le tracé ci-dessus en utilisant '+ draw_plot_label (label = c ("A", "B", "C"), size = 15, x = c (0, 0.3, 0,6), y = c (1, 1, 1)) '. Dans le patchwork, il y a 'plot_annotation' mais cela semble trop limité pour ce que je veux faire. Une réponse alternative serait donc toujours très utile.



2
votes

Pourquoi n'utilisez-vous pas la fonction plot_grid ?

library(patchwork)
without_x_title + without_x_title_labels_1 + without_x_title_labels_2 +
  plot_annotation(tag_levels = 'A',
                  tag_suffix = ')')

Si vous utilisez patchwork et souhaitez une annotation de tracé:

library(tidyverse)
library(cowplot)

plot_grid(without_x_title, without_x_title_labels_1, without_x_title_labels_2,
          ncol  = 3,
          align = 'hv',
          axis  = 'tb',
          labels = "AUTO")

p>

Créé le 13/02/2019 par le package reprex (v0.2.1. 9000)


1 commentaires

Merci @Tung. Cela fonctionne également, mais aucune des deux options ne donne la granularité de contrôle que je recherche. Ainsi, des réponses alternatives qui évitent de redimensionner les ggplots seraient toujours utiles. Comme objectif, les tracés modifiés doivent avoir des positions d'axe identiques lorsqu'ils sont visualisés dans le visualiseur de tracés RStudio ou lorsqu'ils sont enregistrés en tant qu'images. J'ai aussi essayé le thème (plot.margin = ...) mais cela n'aide pas non plus.



1
votes

Cette réponse est de @cderv sur le Site de la communauté RStudio . Je colle une version légèrement modifiée ici car elle complète les deux excellentes réponses ci-dessus et est peut-être plus générale.

Dans la question ci-dessus, axis.text.x = element_blank () supprimera le élément de texte de l'axe, il y a donc un redimensionnement.

scale_x_discrete (labels = "") n'est pas correct ici car l'échelle des x est continue.

Au lieu de cela utilisez scale_x_continuous pour remplacer les libellés par "" comme dans le code ci-dessous:

tb <- tibble(a = 1:5, b = 1:5)

without_x_title <- ggplot(tb, aes(a,b)) +
  geom_point() +
  labs(x = "")

# knowing how many break there are
without_x_title_labels_1 <- without_x_title +
  scale_x_continuous(labels = rep("", 5), breaks = 1:5)

# using a function of breaks
without_x_title_labels_2 <- without_x_title +
  scale_x_continuous(labels = function(breaks) {rep_along(breaks, "")})

ggdraw() +
  draw_plot(without_x_title, x = 0, y = 0, width = 0.3, height = 1) +
  draw_plot(without_x_title_labels_1, x = 0.3, y = 0, width = 0.3, height = 1) +
  draw_plot(without_x_title_labels_2, x = 0.6, y = 0, width = 0.3, height = 1)

 entrez la description de l'image ici p>


0 commentaires