2012-12-13 153 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]])