Подтвердить что ты не робот

Сделать логарифмическую ось y по гистограмме, используя R

Привет, я делаю гистограмму с помощью R, но число оси Y настолько велико, что мне нужно превратить ее в логарифмическую. Посмотрите ниже моего script:

hplot<-read.table("libl")
hplot
pdf("first_end")
hist(hplot$V1, breaks=24, xlim=c(0,250000000), ylim=c(0,2000000),main="first end mapping", xlab="Coordinates")
dev.off()

Итак, как мне изменить мой script? ТНХ

4b9b3361

Ответ 1

Вы можете сохранить данные гистограммы, чтобы настроить его перед построением:

set.seed(12345)
x = rnorm(1000)

hist.data = hist(x, plot=F)
hist.data$counts = log10(hist.data$counts)

dev.new(width=4, height=4)
hist(x)

dev.new(width=4, height=4)
plot(hist.data, ylab='log10(Frequency)')

enter image description here

enter image description here

Ответ 2

Гистограмма с осью y на шкале логарифма будет довольно нечетной гистограммой. Технически он по-прежнему будет соответствовать определению, но он может выглядеть довольно обманчивым: пики будут сплющены относительно остальной части распределения.

Вместо использования преобразования журнала вы считали:

  • Деление счетчиков на 1 миллион:

    h <- hist(hplot$V1, plot=FALSE)

    h$counts <- h$counts/1e6

    plot(h)

  • Построение гистограммы как оценки плотности:

    hist(hplot$V1, freq=FALSE)

Ответ 3

Другой вариант - использовать plot(density(hplot$V1), log="y").

Это не гистограмма, но она показывает примерно одну и ту же информацию, и она избегает нелогичной части, где бит с нулевым отсчетом не определен в лог-пространстве.

Конечно, это актуально только тогда, когда ваши данные непрерывны, а не когда они действительно категоричны или упорядочены.

Ответ 4

Вы можете зарегистрировать свои значения y для графика и затем добавить пользовательскую логическую ось y.

Вот пример для объекта таблицы случайных нормальных номеров распределения:

# data
count = table(round(rnorm(10000)*2))
# plot
plot(log(count) ,type="h",  yaxt="n", xlab="position", ylab="log(count)")
# axis labels
yAxis = c(0,1,10,100,1000)
# draw axis labels
axis(2, at=log(yAxis),labels=yAxis, las=2)

данные журнала с меткой оси журнала