GGplot2: построить гистограмму с логарифмическим масштабом, но с линейными значениями? - PullRequest
0 голосов
/ 06 августа 2011

Я создал гистограмму с ggplot2 в R и мне нужна логарифмически разнесенная ось X, но я хотел бы сохранить свои линейные значения.

Возможно ли это?

Моя формула до сих пор:

ggplot(f0peruttnq, aes(f0)) +
  geom_histogram(alpha=0.3, fill='white', colour='black')

Немного не по теме: я также пытался наложить нормальную кривую поверх моей гистограммы, но geom_density (), похоже, не работает, если я хочу сохранить счет вместо значений плотностина оси х.Как я уже пробовал + stat_function (fun = dnorm), ничего не изменилось!

Заранее благодарен за любые полезные советы!

Работает сейчас!

Формула, которую я использовал:

ggplot(data, aes(V2)) + geom_histogram(alpha=0.3, fill='white', colour='black')+scale_x_log10(breaks=c(50,100,150,200,250),labels=c(50,100,150,200,250))

Спасибо за ваше терпение: -)

Ответы [ 2 ]

4 голосов
/ 06 августа 2011

Вы хотите не преобразовывать свои данные, а только график? Если это так, это просто:

Модифицированный пример из страниц справки ggplot2 :

library(ggplot2)
dat <- subset(movies, votes > 1000)
m <- qplot(rating, votes, data=dat, na.rm = T)
bks <- seq(min(dat$rating),max(dat$rating))
m + scale_x_log10(breaks=bks,labels=bks)

plot

0 голосов
/ 06 августа 2011

Я не уверен, что это возможно с ggplot2, но если вы не совсем привязаны к этой библиотеке, я на 99% уверен, что вы можете сделать это с помощью функции axis() стандартной библиотеки graphics.

Со всем должным уважением и без намерения создавать обсуждение здесь (мы можем взять его в чат, если хотите), но разве это не вводит в заблуждение?Метки на оси x должны отражать их фактические значения.Поскольку вы преобразовываете данные в журнал, метки осей должны отражать это преобразование.Делать иначе было бы нечестно с научной точки зрения.


Отредактировано для примера использования библиотеки graphics ... не так красиво, как ggplot2, но она делает то, что вы хотите (примечание: я ошибался насчет необходимости редактировать разрывы гистограммы):

> data <- log(rnorm(10000, 100, 10))  #simulate some data that looks like yours
> hist(data) # view a normal histogram of the data with log values on the x-axis
> tick_locations = c(4.2, 4.4, 4.6, 4.8, 5.0)  # copy the tick locations from the normal plot
> tick_labels = exp(tick_locations) # reverse the log transformation; you can also create this manually
> hist(data, xaxt = "n")  # plot without the x-axis
> axis(1, at = tick_locations, labels = tick_labels) # add the x-axis with the de-transformed values
...