在r中使用梯度显示直方图

时间:2014-02-06 02:56:57

标签: r plot gradient histogram

我有一个看起来像这样的数据集(n = 9,141,954)

data<-c(rep(1, times=401),rep(2,times=443789),rep(3,times=5276376),rep    (4,times=3003895),rep(5,times=404108),rep(6,times=13181),rep(7,times=205))

直方图看起来像这样:

hist(data,prob=T,breaks=5)

从左到右,我想显示颜色“darkgreen”“chartreuse4”“yellowgreen”“yellow”“orange2”“red”和“red3”

我知道我可以使用col = c(“darkgreen”,“chartreuse4”,....等),但我想做的是将这些颜色显示为直方图上的渐变,由每个值对数据集的相对贡献。例如,value = 1仅占单元格值的0.004%(401/9141954 * 100),而value = 4则占数据的32.9%。因此,我希望渐变显示为0.004%与“darkgreen”相关联,但32.9%与“yellow”相关联,依此类推其余的值/颜色。

有谁知道如何做到这一点???

1 个答案:

答案 0 :(得分:0)

这样的东西?

res <- hist(data,breaks=5)
plot(res)

cols <-c("darkgreen","chartreuse4","yellowgreen","yellow","orange2","red","red3")
colcombos <- data.frame(embed(cols,2)[,2:1],nums=round(res$density*600))
selcols <- unlist(
             apply(colcombos,1,function(x) colorRampPalette(c(x[1],x[2]))(x[3]))
           )

dens <- 100
bar.dens <- 1/100

rect(
 seq(1,7-bar.dens,bar.dens),
 0,
 seq(1+bar.dens,7,bar.dens),
 rep(res$counts,each=dens),
 col=selcols,
 border=NA
)

plot(res,add=TRUE)

结果,不幸的是看起来并不那么令人兴奋,但是如果你将条形图绘制成均匀的高度,那么颜色就在那里:

enter image description here

enter image description here