2
votes

Comment changer l'échelle de l'axe y dans la fonction de boîte à moustaches R

Lorsque je fais un diagramme en boîte avec la fonction R boxplot , cette fonction imprime automatiquement l'axe des y.

library(datasets)

boxplot(cars[c('speed', 'dist')],
        col = "lightgray")

Dans le ? boxplot J'ai trouvé le paramètre ylim qui modifie les limites de l'axe y, mais ne modifie pas l'échelle. J'ai donc essayé d'utiliser la fonction axis pour diviser l'échelle de 0 à 120 tous les 10: axis (4, at = seq (0, 120, 10)) . Mais je n'obtiens pas un résultat satisfaisant.

Je ne vois pas où je fais des erreurs. Quelqu'un pourrait-il répondre à cette question?
Merci d'avance.

 boxplot


5 commentaires

Peut-être que boxplot (..., yaxt = "n") suivi de axis (2, at = seq (0, 120, 10), las = 2) .


Ceci est une question similaire qui soutient le commentaire de @RuiBarradas.


Salut @RuiBarradas ça a bien fonctionné! Merci pour votre soutien. Pourriez-vous faire une réponse, s'il vous plaît? Je n'ai pas compris pourquoi las = 2 et non las = 1 .


Salut @maydin. Je pense que cette question est un peu différente. Parce que je ne pouvais créer un axe y segmenté qu'en utilisant l'argument las dans la fonction axis .


Terminé, voir la réponse ci-dessous.


3 Réponses :


1
votes

Vous pouvez utiliser ggpubr à la place. Il vous permet de le traiter comme un objet gg .

p + ggpubr::yscale("log2", .format = TRUE)

entrez la description de l'image ici

Si vous le souhaitez à l'échelle du journal:

librabry(ggpubr)
library(reshape2)
df <- melt(cars)
p <- ggpubr::ggboxplot(data = df, x = "variable", y = "value", width = 0.8) +
  ggtitle("Plot of car") +
  xlab("my-xalabel") + ylab("my-ylabel")
>p

entrez la description de l'image ici


1 commentaires

Salut @MAPK, votre réponse n'a pas fonctionné pour moi. Il ne s'agit pas de la fonction boxplot. Et n'a pas renvoyé le diagramme boxplot avec l'axe des y segmenté tous les 10. Merci pour votre soutien.



2
votes
library(datasets)
boxplot(cars[c('speed', 'dist')], col = "lightgray", ylim = range(0:120), yaxs = "i")
axis(4, at=seq(0, 120, 10))
The y-axis is on the right-hand side as you wanted I believe.

6 commentaires

Qu'est-ce que cela fait?


mise en œuvre correcte pour mettre tous les 10 incréments sur les axes verticaux.


Salut @Vitali Avagyan, ta réponse n'a pas fonctionné pour moi. Comment pouvez-vous voir tracer le diagramme, il n'a pas renvoyé la boîte à moustaches avec l'axe des y segmenté tous les 10. Merci pour votre soutien.


C'est étrange, j'ai pu l'obtenir. J'essaierai d'ajouter le résultat.


@cladius, j'ai édité le message et mis le résultat qui a été produit par une exécution du même code exact qui est écrit dans ma réponse. Pouvez-vous au moins confirmer que c'est ce que vous recherchez? Merci.


Maintenant, cela a bien fonctionné. =) Merci encore pour le soutien.



1
votes

Je réponds parce que le PO a déclaré dans un commentaire que mon commentaire faisait le travail. Je vais également expliquer le code ici.

Il y a deux astuces à considérer:

  1. Premier tracé sans l'axe y en définissant l'argument yaxt = "n" .
  2. Tracez ensuite l'axe numéro 2, avec les étiquettes toujours perpendiculaires à l'axe. Cela se fait avec las = 2 .

Le code final est donc le suivant.

library(datasets)

boxplot(cars[c('speed', 'dist')],
        col = "lightgray", yaxt = "n")
axis(2, at = seq(0, 120, 10), las = 2)

 entrez la description de l'image ici


2 commentaires

J'ai essayé las = 1 et cela a fonctionné aussi. Mais las = 3 ne fonctionne pas. J'essaie de comprendre comment le paramètre las est lié à la segmentation de l'axe y. On dirait informagique.


@claudius La référence est la documentation officielle : las = 1 signifie "toujours horizontal" ; las = 2 signifie "toujours perpendiculaire à l'axe et las = 3 est " toujours vertical ". Et c'est travailler avec moi.