11

使用ggplot2,我想创建一个直方图,其中 X 以上的任何内容都被分组到最终的 bin 中。例如,如果我的大部分分布在 100 到 200 之间,并且我想按 10 分箱,我希望将 200 以上的任何东西分箱到“200+”中。

# create some fake data    
id <- sample(1:100000, 10000, rep=T)
visits <- sample(1:1200,10000, rep=T)

#merge to create a dataframe
df <- data.frame(cbind(id,visits))

#plot the data
hist <- ggplot(df, aes(x=visits)) + geom_histogram(binwidth=50)

如何限制 X 轴,同时仍代表我想要限制的数据?

4

2 回答 2

6

也许您正在寻找以下breaks论点geom_histogram

# create some fake data    
id <- sample(1:100000, 10000, rep=T)
visits <- sample(1:1200,10000, rep=T)

#merge to create a dataframe
df <- data.frame(cbind(id,visits))

#plot the data
require(ggplot2)
ggplot(df, aes(x=visits)) +
  geom_histogram(breaks=c(seq(0, 200, by=10), max(visits)), position = "identity") +
  coord_cartesian(xlim=c(0,210))

这看起来像这样(需要注意的是,这里的假数据看起来很糟糕,并且轴也需要调整以匹配中断):

直方图上的手动中断

编辑:

也许其他人可以在这里权衡:

# create breaks and labels
brks <- c(seq(0, 200, by=10), max(visits))
lbls <- c(as.character(seq(0, 190, by=10)), "200+", "")
# true
length(brks)==length(lbls)

# hmmm
ggplot(df, aes(x=visits)) +
  geom_histogram(breaks=brks, position = "identity") +
  coord_cartesian(xlim=c(0,220)) +
  scale_x_continuous(labels=lbls)

情节错误:

Error in scale_labels.continuous(scale) : 
  Breaks and labels are different lengths

看起来像这样,但那是 8 个月前修复的。

于 2012-07-23T17:35:42.007 回答
6

如果您想稍微捏造一下以解决 bin 标签问题,那么只需对您的数据进行子集化并在新的牺牲数据框中创建 binned 值:

id <- sample(1:100000, 10000, rep=T)
visits <- sample(1:1200,10000, rep=T)

#merge to create a dataframe
df <- data.frame(cbind(id,visits))
#create sacrificical data frame
dfsac <- df
dfsac$visits[dfsac$visits > 200 ] <- 200

然后使用breaks命令scale_x_continuous轻松定义您的 bin 标签:

ggplot(data=dfsac, aes(dfsac$visits)) + 
  geom_histogram(breaks=c(seq(0, 200, by=10)), 
                 col="black", 
                 fill="red") +
  labs(x="Visits", y="Count")+
  scale_x_continuous(limits=c(0, 200), breaks=c(seq(0, 200, by=10)), labels=c(seq(0,190, by=10), "200+"))

在此处输入图像描述

于 2016-03-24T12:32:27.823 回答