在ggplot2中均匀地水平分布点

时间:2014-03-06 00:29:22

标签: r plot ggplot2

我想绘制计数的垂直箱图,并将计数显示为点,覆盖在箱线图上。因为它们是离散值,所以会有多个具有相同值的点。为了在ggplot2中显示数据,我可以使用geom_jitter()来传播数据并获得稍微好一点的印象,但是抖动会使值(垂直分量)上升,而水平扩展的随机性意味着如果抖动高度是设置为0,重叠点的可能性很高。

有没有办法将所有具有相同值的点均匀地和水平地展开?有点像这样:

enter image description here

以下是一些示例数据:

wine_votes <- melt(list(a=c(7,7,7,8,8,7,7,8,4,7,7,6,8,6),
                        b=c(5,8,6,4,3,4,4,9,5,8,4,5,4),
                        c=c(7.5,8,5,8,6,8,5,6,6.5,7,5,5,6),
                        d=c(4,4,5,5,6,8,5,8,5,6,3,6,5),
                        e=c(7,4,6,7,4,6,7,5,6.5,8.5,8,5)
                        ))
names(wine_votes) <- c('vote', 'option')

# Example plot with jitter:
ggplot(wine_votes, aes(x=blend, y=vote)) +
  geom_boxplot() + geom_jitter(position=position_jitter(height=0, width=0.2)) +
  scale_y_continuous(breaks=seq(0,10,2))

enter image description here

1 个答案:

答案 0 :(得分:7)

虽然这不完全是图像的样子,但可以调整它以达到目的。 geom_dotplot(我认为在0.9.0版本中添加)是这样做的:

ggplot(wine_votes, aes(x=option, y=vote)) +
  geom_boxplot() +   
  scale_y_continuous(breaks=seq(0,10,2)) +
  geom_dotplot(binaxis = "y", stackdir = "center", aes(fill=option))

enter image description here