R барплот шкалы оси Y слишком короткий

Я пытаюсь сгенерировать барплот, но масштаб оси Y слишком короткий. Вот мой код:

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

короткая ось Y

Он покидает пространство для оси (согласно 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.

barplot(data)

введите описание изображения здесь

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

введите описание изображения здесь

yaxp=c(ось minY, ось maxY, интервал)

Другие вопросы по тегам