使用直方图中断在第二列上应用函数

时间:2012-08-08 20:35:13

标签: r colors histogram

我有多列数据,比方说x和时间。我想制作列x的直方图,并根据列时间中的值的聚合为每个条形图着色,其中聚合按照用于直方图的间隔进行分组。所以,

d = cbind(c(rep(1,3), rep(2,3)), c(10,20,10,20,10,20))
names(d) = c("x", "time")
hist(d[,"x"])

给了我一个漂亮的条形图,让我说我想要这样的颜色:

palette(rainbow(25))
hist(d[,"x"], col=d[,"time"], n=10)

我想将col作为长度为10的向量,它是时间列的聚合函数(例如均值)。

2 个答案:

答案 0 :(得分:1)

我会使用plyrggplot2执行此操作:

require(plyr)
require(ggplot2)

d <- data.frame(x=c(rep(1:4, each=4)), time=sample(10:100, 16, replace=T))
d <- ddply(d, .(x), transform, mean.time=mean(time))

ggplot(d, aes(x=x, group=x, fill=mean.time)) +
  geom_histogram()

enter image description here

答案 1 :(得分:0)

如果我理解正确,您希望平均每个x的时间值并绘制直方图。但是你想用哪种颜色?基于平均时间值或x值的梯度或个体?

将此示例视为起点

require(ggplot2)
d <- data.frame(x=c(rep(1:4, each=4)), time=sample(10:100, 16, replace=T)) # thanks to Andy :)
ggplot(d, aes(x=factor(x), y=time)) + 
stat_summary(fun.y="mean", geom="bar", aes(fill=factor(d$x)))

ggplot(d, aes(x=factor(x), y=time)) + 
stat_summary(fun.y="mean", geom="bar", aes(fill=d$x))