如何使用抖动将散点图添加到散点图中

时间:2014-05-15 10:33:37

标签: r plot lattice

我使用以下命令生成带抖动的散点图:

ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5],500,replace=T))
library(lattice)
stripplot(NUMS~GRP,data=ddf, jitter.data=T)

我想在这些点上添加箱图(每组一个)。我尝试搜索,但我无法找到代码绘制所有点(而不仅仅是异常值)和抖动。我该怎么解决这个问题。谢谢你的帮助。

4 个答案:

答案 0 :(得分:37)

这是使用基本图形的一种方式。

boxplot(NUMS ~ GRP, data = ddf, lwd = 2, ylab = 'NUMS')
stripchart(NUMS ~ GRP, vertical = TRUE, data = ddf, 
    method = "jitter", add = TRUE, pch = 20, col = 'blue')

enter image description here

答案 1 :(得分:23)

要在ggplot2中执行此操作,请尝试:

ggplot(ddf, aes(x=GRP, y=NUMS)) + 
  geom_boxplot(outlier.shape=NA) + #avoid plotting outliers twice
  geom_jitter(position=position_jitter(width=.1, height=0))

ggplot2 version of boxplot + jitter

显然你可以根据自己的喜好调整position_jitter()的宽度和高度参数(虽然我推荐height=0,因为高度抖动会使你的情节不准确)。

答案 2 :(得分:1)

我已经在包plotteR中编写了一个名为spreadPoints()的R函数。可以使用以下代码将该软件包直接安装到您的R库中:

install.packages("devtools")
library("devtools")
install_github("JosephCrispell/basicPlotteR")

对于所提供的示例,我使用以下代码生成了下面的示例图。

ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5],500,replace=T))

boxplot(NUMS ~ GRP, data = ddf, lwd = 2, ylab = 'NUMS')

spreadPointsMultiple(data=ddf, responseColumn="NUMS", categoriesColumn="GRP",
                     col="blue", plotOutliers=TRUE)

enter image description here

这是一个正在进行的工作(缺少输入公式很笨拙!),但是它提供了一种非随机的方法来扩展X轴上的点,该点还可以像小提琴一样用作数据摘要。如果您有兴趣,请查看来源code

答案 3 :(得分:1)

对于lattice解决方案:

library(lattice)
ddf = data.frame(NUMS = rnorm(500), GRP = sample(LETTERS[1:5], 500, replace = T))
bwplot(NUMS ~ GRP, ddf, panel = function(...) {
  panel.bwplot(..., pch = "|")
  panel.xyplot(..., jitter.x = TRUE)})

默认的中点符号已更改为pch = "|"行。盒子和晶须的其他属性可以通过box.umbrella函数通过box.rectangletrellis.par.set()进行调整。可以通过名为factor的变量来调整抖动量,其中factor = 1.5将其增加50%。

lattice solution to boxplot with scatter