1
votes

Existe-t-il un ggplot one liner pour supprimer complètement l'axe des x et tous les composants associés?

Je trace souvent des graphiques qui n'ont pas d'axe des x. Le code de ggplot ressemble souvent à ceci:

library(ggplot)
ggplot(mtcars, aes(disp, mpg)) + 
  geom_point() + 
  theme_classic() + 
  theme(axis.title.x = element_blank(),  # line 5
        axis.text.x = element_blank(),  # line 6
        axis.ticks.x = element_blank(),  # line 7
        axis.line.x = element_blank())  # line 8

Y a-t-il une ligne que je peux utiliser pour remplacer les lignes cinq à sept? Je trace constamment ces graphiques et je cherche quelque chose de moins long à taper.

 ggplot no x-axis


1 commentaires

Vous pouvez créer un thème, voir SO ou R-bloggers .


3 Réponses :


3
votes

Vous pouvez en créer un nouveau et utiliser ce thème à la place:

newtheme <- theme_classic() + 
    theme(axis.title.x = element_blank(),  # line 5
          axis.text.x = element_blank(),  # line 6
          axis.ticks.x = element_blank(),  # line 7
          axis.line.x = element_blank())  # line 8

ggplot(mtcars, aes(disp, mpg)) + 
    geom_point() +
    newtheme


0 commentaires

2
votes

Vous pouvez définir les pauses à des positions ridicules et le nom sur NULL et cela ne s'affichera pas.

scale_x_null <- function() {
  scale_x_continuous(breaks = -Inf, name = NULL)
}

ggplot(mtcars, aes(disp, mpg)) + 
  geom_point() +
  scale_x_null()

 entrez la description de l'image ici

Vous pouvez également lui créer un wrapper si vous le souhaitez encore plus court.

ggplot(mtcars, aes(disp, mpg)) + 
  geom_point() + 
  scale_x_continuous(breaks = -Inf, name = NULL)


10 commentaires

une idée assez nouvelle et j'aime ça. Le seul problème est que axis.line.x est tracé si vous utilisez theme_classic () avec votre code. Un moyen simple de résoudre ce problème? Et le nouveau problème que j'ai à écrire n'est-il pas à écrire ce wrapper dans chaque script et fichier .Rmd que je crée? Je suppose qu'une fois vaut mieux que plusieurs fois. Ou est-ce que je crée juste un fichier cheat-sheet.R avec toutes mes fonctions personnalisées et exécute source (cheat-sheet.R) sur chaque script que je crée? Je pourrais créer un package juste pour des morceaux de code courts comme celui-ci, mais cela semble excessif.


Hmm bonne question, j'utilisais ggplot2 3.1.0 et aucune ligne n'est apparue, mais quand j'ai mis à jour vers 3.2.0, la ligne était là. Devrait remonter les versions comment cela a été introduit et ce qui pourrait contourner cela. Personnellement, j'utilise un modèle de démarque avec tous mes paramètres habituels dans le modèle lui-même.


Je ne pouvais pas tout à fait comprendre quel changement causait cette différence entre 3.1.0 et 3.2.0, mais j'ai trouvé une requête de tirage intéressante sur le ggplot2 github qui vous permettrait de définir des guides de position (c'est-à-dire l'axe des x) sur des guides personnalisés , y compris les guides inexistants. Je suppose que vous n'avez pas eu de chance avec 3.2.0 car les versions antérieures et postérieures auraient une solution. github.com/tidyverse/ggplot2/pull/3398


quand vous dites la version "après" voulez-vous dire la version future, pas encore sortie? J'ai juste installé devtools :: install_github ("tidyverse / ggplot2") et la dernière version est ggplot2_3.2.0.9000 .


Oui c'est ce que je voulais dire, désolé


et pourquoi utiliser -Inf quand Inf semble fonctionner tout aussi bien et est une frappe de moins? Une raison impérieuse?


La première tentative avait -1e6, que j'ai changé en -Inf, le signe moins est resté. J'imagine qu'Inf serait mieux quand une transformation log est appliquée puisque log10 (-Inf) est évalué comme NaN et log10 (Inf) est évalué comme Inf .


Lorsque la demande d'extraction est terminée, quel sera l'argument que je devrais ajouter à votre code pour supprimer axis.line.x ? github.com/tidyverse/ggplot2/pull/3398


Je suppose que ce serait + scale_x_continuous (guide = guide_none ()) basé sur la syntaxe publiée dans cette pull request sous les détails, mais il serait trop tôt pour le dire avec certitude. Mais ce serait remplacer + scale_x_null () / + scale_x_continuous (breaks = Inf, name = NULL) , pas y ajouter.


Merci, j'aime cette réponse, mais malheureusement, je dois attendre qu'elle fonctionne réellement. À votre santé.



1
votes

Il n'est pas difficile de créer un thème avec les définitions souhaitées par l'utilisateur. J'ai trouvé ce message SO et ce article de R-bloggers utile.
Notez que dans l'exemple, il n'y a pas besoin de theme_classic().

library(ggplot2)

theme_no_x_axis <- function(base_size = 12, base_family = "Helvetica"){
  theme_bw(base_size = base_size, base_family = base_family) %+replace%
    theme(
      axis.title.x = element_blank(),
      axis.text.x = element_blank(),
      axis.ticks.x = element_blank(),
      axis.line.x = element_blank()
    )
}

ggplot(mtcars, aes(disp, mpg)) + 
  geom_point() + 
  theme_no_x_axis()

 entrez la description de l'image ici

p>


4 commentaires

Que fait % + replace% ? Je n'ai jamais vu ça auparavant. Merci.


@JasonHunter De R-bloggers: nous pouvons créer un nouveau thème en tant que fonction appelant un thème existant, qui est modifié par% + replace% theme () avec toutes les modifications définies dans theme (). .


@JasonHunter J'ai changé l'exemple en exemple de mtcars dans la question, comme j'aurais dû le publier en premier lieu.


En fait, je voulais le look theme_classic () , mais votre réponse est toujours excellente.