• R语言
  • 求助:如何画下面的图





如上图。A,B,C,D,E为5个分类,根据这5个分类里每一个样本的销售量区间,按既定的区间颜色作图。



如A分类里有14个样本,其中销量〉20,〈=40 的样本有4个,我可以从图中很直观的看到。



谢谢大家了 *_*
忘了说明两点:

上面的图是我为了给大家做演示,在EXCEL里用很笨的方法随便做的。

需要给大家一些数据吗?
?image



不过画出来还得自己添加点东西。
比较原始的方法:
<br />
a <- matrix(rep(1,100),nr=20)<br />
col.ref <- rainbow(5)<br />
a.col <- matrix(sample(col.ref,100,replace=T),nr=20)<br />
a.part <- a<br />
a.part[,-1] <- 0<br />
a.bar <- barplot(a.part,col=a.col[,1],xlim=c(0,9))<br />
sapply(2:5,function(x){<br />
    a.part <- a<br />
    a.part[,-x] <- 0<br />
    barplot(a.part,col=a.col[,x],add=T)<br />
})<br />
legend(6.5,10,fill=col.ref,c("a","b","c","d","e"))<br />


[attachment=148]
根据lz的要求,建议把rainbow改成heatmap的颜色 [s:11]
image确实强大,heatmap也能做相同的事,但是xy轴的标注不太好去掉。颜色的问题,我还没能很好解决。
<br />
col.ref <- cm.colors(20)[c(20,17,15,12,10)]<br />
image(matrix(sample(1:5,20*5,replace=T),nr=5),col=col.ref,xlim=c(-0.15,1.5),axes=FALSE)<br />
axis(1,seq(0,1,0.25),LETTERS[1:5],tick=FALSE)<br />
legend(1.2,0.9,fill=col.ref[5:1],letters[1:5])<br />
savePlot("frame.png",type="png")<br />


[attachment=149]
颜色可以用渐变色,heat.colors()或者grey()等都行
谢谢大家的帮助,让我有了点思路。但是还有两个问题没解决:

1、每一个分类里同一颜色的网格数量等于同一销售级别的样本数量。

2、从下往上是销量升序的排序,同时网格颜色也越来越深。



其实我想做的图就是把一个直方图里的频次条纵向叠起来,再把很多个这样的直方图放一起  #_#
谢谢大家,如图







勉强用SPSS解决了。