R barplot échelle de l'axe Y trop courte

j'essaie de générer un barplot, 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 de la place pour l'axe (selon ylim), mais ne remplit pas l'axe réel. J'ai été par le biais de ?barplot et essayé quelques choses (de googler autour de je pensais xpd = F, yaxs = c(10000,10000000,5) devrait fonctionner, mais il n'a pas).

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

Modifier: Bravo pour la saisie gars!

j'ai d'abord tracé sans ylim, mais il 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=",")

Modifier 2: @DWin avait raison - j'ai mis à jour mon R, et maintenant il se loge très bien-merci tout le monde!

24
demandé sur Karolis Koncevičius 2013-04-20 19:14:03

3 réponses

je vois que vous essayez de définir ylim mauvais vous donnez de mauvaises valeurs. Cela va changer l'échelle de la parcelle(comme un zoom) voir Par exemple 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 régler manuellement en utilisant 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

25
répondu agstudy 2013-04-20 16:08:28

la solution la plus simple semble spécifier le ylim plage. Voici quelques codes 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

le truc est d'utiliser pretty() qui renvoie une liste d'intervalle pauses couvrant toutes les valeurs des données fournies. Il garantit que la valeur maximale retournée est 1) un nombre rond 2) plus grande que la valeur maximale dans les données.

dans l'exemple 0 a aussi été ajouté pretty(c(0, dat)) ce qui assure que l'axe commence à 0.

0
répondu Karolis Koncevičius 2018-05-05 20:37:58
barplot(data)

enter image description here

barplot(data, yaxp=c(0, max(data), 5))

enter image description here

yaxp=c(minY-axe, maxY-axe, Intervalle)

-3
répondu lily 2016-10-28 20:01:34