在ggplot2中,是否可以使用包含重叠数据的存储桶创建条形图?

时间:2014-01-16 18:38:21

标签: r ggplot2 data-visualization bar-chart

我正在创建一个条形图,其中数据被一些连续变量X所取代。我想创建一个条形图,其中桶实际上是重叠的。因此,如果binwidth = 1/10,那么第一个条形将包含Xs在第0到第10百分位数的数据。第二个栏可能包含第1到第11百分位数的Xs数据。第三个将包含Xs从第2百分位到第12百分位的数据。等等。在ggplot中是否可以这样?

编辑:

我应该澄清一下。我不希望条形图在视觉上重叠,所以我删除了你的编辑Martin。相反,我希望相邻的存储桶部分共享数据点。重要的是要注意

1)我的X数据已经被识别 2)条形图报告了分段数据的摘要统计,例如方差。

因此,在正常条形图中,binwidth为1/10,您的第一个条形代表0-10百分位数据,第二个条形代表10-20百分位数,依此类推。但是,我想要的是第一个柱子代表0-10百分位数,第二个柱子代表第1个百分位数,第三个代表第2-12个百分位数,依此类推。这样做的原因只是将binwidth与图表上显示的条数分开。我想要一个宽大的水桶,但是我想以非常小的间隔查看这些水桶以查看更连续的条形图。

3 个答案:

答案 0 :(得分:2)

是的,ggplot可以实现。试试这个ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar(position=position_dodge(width=0.5))

现在进行解释

ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar(position = "dodge")
ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar(position = position_dodge(width = 0.5))

代码块中的第一个命令是默认闪避(并排条)。 第二个命令你告诉ggplot使用width参数“闪避”多少。 玩宽度直到你得到你想要的东西。

有关position_dodge的更多详细信息,请阅读此http://docs.ggplot2.org/0.9.3.1/position_dodge.html。 另外,对于关于分箱的问题,您可以提供自己的休息时间,请阅读此http://docs.ggplot2.org/0.9.3.1/stat_bin.html

答案 1 :(得分:2)

采取极限,你正在做的是绘制核密度函数。在这里,我创建了200个随机正态观测值的向量,并使用stat_density绘制滚动密度:

vec <- rnorm(200)
qplot() + stat_density(aes(x=vec))

enter image description here

答案 2 :(得分:1)

您可能首先将自己的数据存储起来,然后根据需要进行绘图。它会给你更多的灵活性。同意@BrodieG rollapply()最简单,例如

require(ggplot2)
require(zoo)

p_data<-data.frame(n=0:99,p=runif(100)*10)
window<-10

buckets<-data.frame(label=rollapply(p_data$n,10,function(x)paste(x[1],x[window],sep="-")))
buckets$avg<-rollapply(p_data$p,window,mean)  # mean
buckets$tot<-rollapply(p_data$p,window,sum)   # total
buckets$var<-rollapply(p_data$p,window,var)   # variance
buckets$custom<-rollapply(p_data$p,window,function(x)x[1]+x[2]+5)   # anything you like

qplot(buckets$label,buckets$avg,geom="line",group=1) +     # plot mean
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

enter image description here