2012-12-13 89 views
3

我想绘制类似于beanplotviolin绘图的绘图,但不是对称形状,我想在中心线的不同侧绘制两个不同的分布。像这篇文章中的图4一样[pdf] http://www.jstatsoft.org/v28/c01/paper如何在R中使用网格图形绘制直方图?

我想在R中使用grid图形引擎。任何指针都会有用。我看了lattice包和histogram函数包,但这不是我想要做的。

任何帮助/指针表示赞赏。

+0

@BenBarnes它的第六页(第六页只有一个情节)。这确实是一个boxplot的选择。 – MattLBeck

+0

@Mottrition,Ooohh。这是一个有趣的情节。啊,图4,不是第4页。 – BenBarnes

+0

我不完全确定OP需要什么。从论文中可以清楚地看到,图形可以使用'beanplot'生成,甚至可以使用代码来实现。 – MattLBeck

回答

4

您可以通过对函数panel.violin进行相当简单的修改,在Sarkar的晶格包中合理轻松地获得小提琴曲线图。该函数中有四行可在grid.polygon调用中更改,以从“双面”密度绘图变为单面密度绘图。第一个require(lattice)require(grid)。然后键入panel.violin。我会告诉你的“水平”变化:

require(grid) 
panel.violin2 <- 
    # snipped all the arguments and processing 

     grid.polygon(x = c(dx.list[[i]]), 
    # Notice I removed: ... ,rev(dx.list[[i]]) 
       y = c(2*dy.list[[i]] ), default.units = "native", 
    # Removed: ... , -rev(dy.list[[i]]) 
       name = trellis.grobname(identifier, type = "panel", 
       group = group), gp = gpar(fill = col, col = border, 
       lty = lty, lwd = lwd, alpha = alpha)) 

也是从别的{...}子句中的相应栏目中删除。现在你可以在帮助的例子运行(panel.violin)

bwplot(voice.part ~ height, singer, 
     panel = function(..., box.ratio) { 
      panel.violin2(..., col = "transparent", 
         varwidth = FALSE, box.ratio = box.ratio) 
      panel.bwplot(..., fill = NULL, box.ratio = .1) 
     }) 

​​

如果你想对对方的密度,所有你需要做的是去除dx.list [[i]]和dy.list [[i]],并留在rev(dx.list[[i]])-rev(dy.list[[i]])