我想绘制一个类似于 beanplot
或 violin
的图,但我想绘制两个不同的分布,而不是对称形状的中心线。类似于本文 [pdf] 中的图 4 http://www.jstatsoft.org/v28/c01/paper .
我想在 R
中使用 grid
图形引擎。任何指针都会有用。我查看了 lattice
包和 lattice
包中的 histogram
函数,但这不是我想要做的。
感谢任何帮助/指点。
最佳答案
通过对 Sarkar 的 lattice 包中的函数 panel.violin
进行相当简单的修改,您可以相当轻松地获得半 fiddle 图。该函数中有四行可以在 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))
同时将其从 else{ ...} 子句的相应部分中删除。现在您可以使用帮助中的示例运行它(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]])
。
关于r - 如何使用 R 中的网格图形绘制直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861854/