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

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

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()

Итак, как мне изменить свой сценарий? Спасибо


person LookIntoEast    schedule 19.10.2011    source источник
comment
Не имеет смысла иметь логарифмическую ось Y на гистограмме - столбцы простираются до 0, что на логарифмической шкале равно отрицательной бесконечности.   -  person hadley    schedule 20.10.2011


Ответы (4)


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

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)')

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

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

person John Colby    schedule 19.10.2011
comment
Это немного вводит в заблуждение, потому что вы сместили базовую линию с 0 на 10 ^ 0 = 1. - person hadley; 20.10.2011
comment
@hadley Да, я тоже думаю, что это странно. Есть причина, по которой вы не можете просто передать log='y' как обычный сюжет. - person John Colby; 20.10.2011
comment
Работал хорошо, просто dev.new(width=4, height=4) не работал, говоря In (function() : разрешено только одно графическое устройство RStudio, поскольку я использую RStudio. - person saganas; 07.10.2014
comment
@saganas да, вы можете пропустить их в rstudio, пользовательский интерфейс позволяет вам перемещаться между сюжетами - person jena; 15.11.2019

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

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

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

person pipefish    schedule 26.11.2015

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

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

  • Разделив количество на 1 миллион:

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

    h$counts <- h$counts/1e6

    plot(h)

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

    hist(hplot$V1, freq=FALSE)

person Hong Ooi    schedule 20.10.2011
comment
Гистограмма с осью Y в логарифмическом масштабе — довольно распространенная вещь, особенно если вы хотите позаботиться о хвостах, редких событиях, которые принимают экстремальные значения. Ответ на аналогичный вопрос вы можете найти здесь: stackoverflow.com/ вопросы/1245273/ - person Antoni; 11.10.2016

Вы можете записать свои значения 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)

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

person Tobi G.    schedule 13.02.2016