Comment forcer plusieurs tracés r à avoir la même longueur de x-ticks? [dupliquer]
Plusieurs packages de R sont capables d'organiser plusieurs graphiques dans une grille, tels que gridExtra
et cowplot
. Les tracés de la même ligne / colonne sont par défaut alignés sur leur limite. Ce qui suit est un exemple. Trois histogrammes sont disposés verticalement sur le même tracé. Vous pouvez remarquer que les x-ticks ne sont pas alignés et que le tracé de la grille a donc l'air un peu moche.
library(ggplot2);library(grid);library(cowplot)
p1 <- ggplot(data = NULL, aes(x = rt(10,19))) +
geom_histogram(bins = 5, fill = "darkgreen", color = "darkgrey", alpha = 0.6) +
labs(y = "", x = "")
# similar plots for p2, p3
plot_grid(p1, textGrob("N=10"),
p2, textGrob("N=100"),
p3, textGrob("N=10000"),
nrow=3, rel_widths = c(4/5, 1/5))

Le problème est que les outils de traçage dans base
et ggplot2
ne fixeraient pas la longueur des x-ticks et étiraient cowplot::plot_grid
simplement automatiquement les tracés à la largeur maximale. Certaines parcelles ont des étiquettes y plus larges, de sorte qu'elles se retrouvent avec des x-ticks plus courts.
Maintenant, je veux forcer les trois histogrammes à avoir les mêmes longueurs de x-ticks. Je voudrais savoir existe-t-il une méthode / un package pour ce genre de problèmes? Notez qu'en général, le remodelage des données combiné à des fonctions comme ggplot2::facet_wrap
devrait résoudre ce problème, mais je me demande toujours s'il existe une solution plus directe.
Réponses
Personnellement, je pense que le patchwork gère les alignements des parcelles avec élégance et vous pouvez faire en sorte que les parcelles partagent un axe x en fixant les limites sur une échelle commune.
library(ggplot2)
library(patchwork)
set.seed(123)
plots <- lapply(c(10, 100, 1000), function(n) {
ggplot(mapping = aes(x = rt(n, 19))) +
geom_histogram(bins = round(sqrt(n)) * 2,
fill = "darkgreen", colour = "darkgrey",
alpha = 0.6) +
labs(y = "", x = "")
})
plots[[1]] / plots[[2]] / plots[[3]] &
scale_x_continuous(limits = c(-5, 5),
oob = scales::oob_squish)
Créé le 2020-11-26 par le package reprex (v0.3.0)
La plot_grid()
fonction peut aligner les tracés, voir ici:https://wilkelab.org/cowplot/articles/aligning_plots.html
library(ggplot2)
library(grid)
library(cowplot)
set.seed(123)
plots <- lapply(c(10, 100, 1000), function(n) {
ggplot(mapping = aes(x = rt(n, 19))) +
geom_histogram(bins = round(sqrt(n)) * 2,
fill = "darkgreen", colour = "darkgrey",
alpha = 0.6) +
labs(y = "", x = "") +
scale_x_continuous(
limits = c(-5, 5),
oob = scales::oob_squish
)
})
plot_grid(
plots[[1]], textGrob("N=10"),
plots[[2]], textGrob("N=100"),
plots[[3]], textGrob("N=10000"),
nrow=3, rel_widths = c(4/5, 1/5), align = "v", axis = "l"
)
Créé le 2020-11-26 par le package reprex (v0.3.0)