1

我有多列数据,比如说 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 的向量,它是时间列的聚合函数(例如平均值)。

4

2 回答 2

1

我会用plyrand来做到这一点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()

在此处输入图像描述

于 2012-08-08T20:58:15.050 回答
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))
于 2012-08-09T04:17:52.123 回答