Выровнять столбцы гистограммы с помощью меток

По соображениям компоновки я хотел бы расположить гистограммные бары, центрированные на ярлыках, так что середина бара находится над меткой.

library(ggplot2)

df <- data.frame(x = c(0,0,1,2,2,2))

ggplot(df,aes(x)) + 
    geom_histogram(binwidth=1) + 
    scale_x_continuous(breaks=0:2)

Это то, что он выглядит до сих пор - левая сторона панели находится поверх метки:

enter image description here

Можно ли настроить данный фрагмент таким образом? (без использования geom_bar вместо f.x.)

Ответ 1

Это не требует категориальной оси x, но вам нужно немного поиграть, если у вас разная ширина бункера, чем 1.

library(ggplot2)

df <- data.frame(x = c(0,0,1,2,2,2))

ggplot(df,aes(x)) + 
geom_histogram(binwidth=1,boundary=-0.5) + 
scale_x_continuous(breaks=0:2)

Для более старых ggplot2 (< 2.1.0) используйте geom_histogram(binwidth=1, origin=-0.5).

Ответ 2

Вот один из вариантов: Вычислите собственные значения y, используйте x как категорированную ось x и используйте geom_bar(stat="identity").

library(ggplot2)
library(data.table)

df = data.table(x = c(0,0,1,2,2,2))

df = df[, .N, by=x]

p = ggplot(df, aes(x=factor(x), y=N)) +
    geom_bar(stat="identity", width=1.0)

ggsave("barplot.png", p, width=8, height=4, dpi=120)

enter image description here

Ответ 3

Код, приведенный ниже, используется, но больше не работает. Это мешало ggplot предположить, что ячейки могут быть разделены поровну (но теперь ggplot2:: geom_hiustogram ловит эту уловку и предлагает использовать другую функцию:

ggplot(df,aes( factor(x) )) + 
    geom_histogram(binwidth=1 )
#Error: StatBin requires a continuous x variable the x variable is discrete. Perhaps you want stat="count"?

Поэтому вместо этого используйте:

ggplot(df,aes( factor(x) )) + 
    stat_count ()