10

出于布局原因,我想将直方图条放置在标签的中心,以便条的中间位于标签的顶部。

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)

这是到目前为止的样子 - 条形图的左侧位于标签的顶部:

在此处输入图像描述

是否可以以这种方式调整给定的代码段?(不使用 geom_bar 代替 fx)

4

3 回答 3

20

这不需要分类 x 轴,但如果您的 bin 宽度与 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).

于 2013-11-14T22:33:03.080 回答
8

这是一种选择:计算您自己的 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)

在此处输入图像描述

于 2013-11-15T08:48:12.147 回答
5

下面的代码曾经可以工作,但不再有效。它阻止了 ggplot 假设 bin 可以均匀划分(但现在 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 ()
于 2013-11-20T18:44:37.497 回答