我有多列数据,比方说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的向量,它是时间列的聚合函数(例如均值)。
答案 0 :(得分:1)
我会使用plyr
和ggplot2
执行此操作:
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()
答案 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))