horizontal - R barplot Y-axis scale too short
r horizontal barplot (3)
Intento generar un diagrama de barra, pero la escala del eje y es demasiado corta. Aquí está mi código:
barplot(as.matrix(dat), log="y", ylim=c(10000,100000000), beside=TRUE,
ylab = "Number of reads", col = c("gray","black","white"))
Deja el espacio para el eje (según ylim), pero no rellena el eje real. He pasado por ?barplot
y probé algunas cosas (de googlear pensé que xpd = F, yaxs = c(10000,10000000,5)
debería funcionar, pero no fue así).
Sé que es una cuestión menor, pero es exactamente el tipo de problema con el que me quedo estancado durante años, en lugar de trabajar, así que cualquier ayuda sería muy apreciada.
Editar: Saludos por la entrada chicos!
Inicialmente trabé sin ylim, pero termina con un eje aún más extraño (con el mismo problema); De hecho, elegí mis valores de ylim para darle un eje espaciado más agradable.
Aquí están los datos:
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 tenía razón, actualicé mi R, y ahora trama bien, ¡gracias a todos!
La solución más simple parece estar especificando el rango de ylim
. Aquí hay un código para hacer esto automáticamente (a la izquierda por defecto, a la derecha - ajustado):
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))))
El truco es usar pretty()
que devuelve una lista de interrupciones de intervalo que cubren todos los valores de los datos proporcionados. Garantiza que el valor máximo devuelto es 1) un número redondo 2) mayor que el valor máximo en los datos.
En el ejemplo 0 también se agregó pretty(c(0, dat))
que asegura que el eje comienza desde 0.
Veo que tratas de establecer ylim
malo, das malos valores. Esto cambiará la escala de la trama (como un zoom) Por ejemplo, vea esto:
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'')
Otra opción es trazar sin ejes, y configurarlo manualmente usando axis
y 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))