如何使用晶格添加重叠直方图

时间:2014-02-09 19:31:37

标签: r lattice

使用此问题中的数据https://stackoverflow.com/questions/21663108/coloring-points-on-a-lattice-plot-in-r我想使用histogram中的lattice函数在同一个地块上绘制三个直方图但是分开绘制以便我可以控制颜色和允许直方图重叠的半透明颜色。

但是,以下代码不起作用:

histogram(locs[locs.col=="darkblue"] , breaks=20, xlim=c(25,150),col="darkblue" )
histogram(locs[locs.col=="yellow"] , breeaks=20, xlim=c(25,150),col="yellow",add=T ) # add doesn't work here
histogram(locsy[locs.col=="red"] , breaks=20, xlim=c(25,150),col="red",add=T )

因为直方图不会相互添加。我知道这适用于基础包中的hist函数,所以这是我的问题:

1)有没有办法用histogram将直方图添加到图中? 2)如何为直方图的每个实例使直方图的区间具有相同的宽度 3)如何在直方图重叠的位置使颜色半透明? 4)如何将直方图旋转90度,使其频率为水平轴?

2 个答案:

答案 0 :(得分:5)

重叠的直方图有时可以理解和提供信息, 但是,无论如何,使用bwplotviolin plot通常会更好:

histogram( ~Sepal.Length,
     data = iris,
     type = "p",
     breaks = seq(4,8,by=0.2),
     ylim = c(0,30),
     groups = Species,
     panel = function(...)panel.superpose(...,panel.groups=panel.histogram,
                          col=c("cyan","magenta","yellow"),alpha=0.4),
     auto.key=list(columns=3,rectangles=FALSE,
                   col=c("cyan","magenta","yellow3"))
     )

overlapping histograms in R with lattice, Sepal.Length from iris data

答案 1 :(得分:1)

格子histogram函数不支持add = T,它是基本图形的一部分。此外,在格子中获取并排或重叠图的常用方法是使用'groups'参数,histogram again does not support groups. But the help page says that densityplot`将会显示数据点的位置并接受alpha透明度参数:

df <- data.frame(locs=locs, locs.col=locs.col,dataset=dataset)
densityplot(~locs, groups=locs.col,data=df , xlim=c(25,150), alpha=.5 )

enter image description here

如果您想要自己的颜色,可以尝试:...,col=locs.col,...

将materioal添加到关于如何“旋转”密度图的评论开头:

将密度与直方图调用相结合的一个例子,令人惊讶的是我得到了信誉(或责备):

http://markmail.org/search/?q=list%3Aorg.r-project.r-help++densityplot+switch+x+y#query:list%3Aorg.r-project.r-help%20%20densityplot%20switch%20x%20y+page:1+mid:oop3shncxgx4mekc+state:results

--------文本------ 使用densityplot而不是histogram作为包装函数,因此可以使用更极端的范围。当你这样说'break'无效时你会收到错误,但是如果你读了?histogram页面,它表明设置breaks = NULL可能会产生可接受的默认行为,在这种情况下似乎是这样:< / p>

densityplot(~x,data=foo,groups=grp, 
#prepanel=function(x,type,groups,...){???}, 
  panel=function(x,type,groups,...){ 
    panel.densityplot(x,groups=groups,...) 
    panel.histogram(x,col='transparent', breaks = NULL, ...)

} ) 

-------结束引用的材料-------

一个黑客攻击的例子(Dieter Menne),展示了如何将黑客面板拼接成格子调用: http://markmail.org/search/?q=list%3Aorg.r-project.r-help++densityplot+switch+x+y#query:list%3Aorg.r-project.r-help%20%20densityplot%20switch%20x%20y+page:1+mid:fyva5hrio6cn4fs2+state:results