LINUX.ORG.RU

ggplot2, гистограмма рисует слишком много

 , ,


0

1

Доброго времени суток, вот код:

library(ggplot2)

xdf <- data.frame('x' = rnorm(1000))
p <- ggplot(data = xdf) +
  stat_bin(mapping = aes(x, ..density..), binwidth = 0.5, color = 'black', alpha = 0.1) +
  geom_vline(xintercept = -5, linetype = 'dashed') +
  labs(x = 'x', y = 'point density')
ggsave('histo.png', plot = p)

Рисует вот это. Там есть лишний отрезок, которого нет в данных. Вопрос: как его убрать?

cast psv1967

UPD. Поправил ссылки.

Картинки забанены.

Вопроспроизвожу код. Какой отрезок лишний? до -4?

bookman900 ★★★★★ ()
Ответ на: комментарий от bookman900

Мда, вроде проверял картинки.

Да, отрезок от пунктирной линии до начала самой гистограммы. От -5 до примерно -3.5 (конец варьируется по понятной причине).

anonymous ()

Ну вот так вот автор пакета видит правильное решение :)

Пиши Викхаму, что бы обобщил уже имеющийся ключ pad=F и на этот случай.

PS Наверное можно слепить вместе два независимых слоя (скорее всего прибив руками оси в обоих).

psv1967 ★★★★★ ()

Прикрутил велосипед.

library(ggplot2)

calcHistogram <- function(x, binwidth) {
  binpoints <- seq(from = min(x), to = max(x), by = binwidth)
  counts <- tabulate(findInterval(x, binpoints))
  return(data.frame(binpoints = binpoints + binwidth / 2, counts = counts / length(x)))
}

xdf <- calcHistogram(rnorm(1000), 0.5)
p <- ggplot(xdf, aes(x = binpoints, y = counts)) +
  geom_col(width = 0.5, alpha = 0.2, color = 'black') +
  geom_vline(xintercept = -5, linetype = 'dashed') +
  labs(x = 'x', y = 'point density')
ggsave('histo.png', plot = p)

bookman900, psv1967, если будет какая критика, будет хорошо.

UPD. Чуток подправил велосипед.

nezamudich ★★ ()
Ответ на: комментарий от nezamudich

То есть «голый» geom_col() так себя не ведет? как ведет geom_histogram? ну и ладно.

кстати используй сразу его на результатах stat_bin() там по моему был ключ указывающий связанный метод.

psv1967 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.