web-dev-qa-db-fra.com

Bartrot R échelle de l'axe Y trop courte

J'essaie de générer un diagramme à barres, mais l'échelle de l'axe y est trop courte. Voici mon code:

barplot(as.matrix(dat), log="y", ylim=c(10000,100000000), beside=TRUE,
        ylab = "Number of reads", col = c("gray","black","white"))

short y axis

Il laisse la place à l'axe (selon ylim), mais ne remplit pas l'axe réel. J'ai parcouru ?barplot Et j'ai essayé quelques choses (après avoir fait des recherches sur Google, j'ai pensé que xpd = F, yaxs = c(10000,10000000,5) devrait fonctionner, mais cela n'a pas fonctionné).

Je sais que c'est une chose mineure, mais c'est exactement le genre de problème sur lequel je reste coincé depuis des lustres, au lieu de travailler réellement, donc toute aide serait très appréciée!

Edit: Bravo pour les gars d'entrée!

J'ai d'abord tracé sans ylim, mais ça finit avec un axe encore plus bizarre (avec le même problème); J'ai en fait choisi mes valeurs ylim pour lui donner un axe plus espacé. original no ylim

Voici les données:

dat <- read.table(text="D2,D3n,D3m,D4n,D4m
21234722,34262282,31920464,25486357,20712943
35343,64403,22537,39934,46547
126646,312286,101105,81537,76944", header=TRUE, sep=",")

Edit 2: @DWin avait raison - j'ai mis à jour mon R, et maintenant ça va bien - merci à tous!

26
jayemee

Je vois que vous essayez de définir ylim mauvais, vous donnez de mauvaises valeurs. Cela changera l'échelle de l'intrigue (comme un zoom) Par exemple, voyez ceci:

par(mfrow=c(2,1))
tN <- table(Ni <- stats::rpois(100, lambda = 5))
r <- barplot(tN, col = Rainbow(20),ylim=c(0,50),main='long y-axis')
r <- barplot(tN, col = Rainbow(20),main='short y axis')

enter image description here

Une autre option consiste à tracer sans axes et à le définir manuellement à l'aide de axis et usr:

require(grDevices) # for colours
par(mfrow=c(1,1))
r <- barplot(tN, col = Rainbow(20),main='short y axis',ann=FALSE,axes=FALSE)
usr <- par("usr")
par(usr=c(usr[1:2], 0, 20))
axis(2,at=seq(0,20,5))

enter image description here

28
agstudy

La solution la plus simple semble être de spécifier la plage ylim. Voici du code pour le faire automatiquement (par défaut à gauche, ajusté à droite):

layout(t(c(1,2)))

# default y-axis
barplot(dat, beside=TRUE)

# automatically adjusted y-axis
barplot(dat, beside=TRUE, ylim=range(pretty(c(0, dat))))

enter image description here

L'astuce consiste à utiliser pretty() qui retourne une liste d'interruptions couvrant toutes les valeurs des données fournies. Il garantit que la valeur maximale renvoyée est 1) un nombre rond 2) supérieur à la valeur maximale dans les données.

Dans l'exemple 0 a également été ajouté pretty(c(0, dat)) qui s'assure que l'axe commence à 0.