R барплот шкалы оси Y слишком короткий
Я пытаюсь сгенерировать барплот, но масштаб оси Y слишком короткий. Вот мой код:
barplot(as.matrix(dat), log="y", ylim=c(10000,100000000), beside=TRUE,
ylab = "Number of reads", col = c("gray","black","white"))
Он покидает пространство для оси (согласно ylim), но не заполняет фактическую ось. Я прошел через ?barplot
и попробовал несколько вещей (от поисков вокруг я думал xpd = F, yaxs = c(10000,10000000,5)
должно работать, но это не так).
Я знаю, что это мелочь, но это именно та проблема, над которой я застрял целую вечность, вместо того, чтобы реально работать, поэтому любая помощь будет высоко цениться!
Изменить: Приветствия для парней ввода!
Сначала я построил график без ylim, но в итоге получилась еще более странная ось (с той же проблемой); Я на самом деле выбрал свои значения ylim, чтобы придать оси более хороший интервал.
Вот данные:
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=",")
Редактировать 2: @DWin был прав - я обновил свой R, и теперь он работает хорошо - спасибо всем!
3 ответа
Я вижу, вы пытаетесь установить ylim
плохо ты даешь плохие ценности. Это изменит масштаб графика (например, увеличение). Например, посмотрите это:
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')
Другой вариант - построить без осей и установить его вручную, используя axis
а также 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))
Самое простое решение, кажется, указав ylim
спектр. Вот некоторый код, чтобы сделать это автоматически (слева по умолчанию, справа отрегулировано):
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))))
Хитрость заключается в использовании pretty()
который возвращает список интервальных разрывов, охватывающий все значения предоставленных данных. Это гарантирует, что максимальное возвращаемое значение 1) округленное число 2) больше максимального значения в данных.
В примере 0 также был добавлен pretty(c(0, dat))
который гарантирует, что ось начинается с 0.