散点图显示具有相同值的所有点

时间:2015-06-27 18:59:18

标签: r plot statistics scatter-plot

如何在R中创建散点图,以便即使在某些类别中具有相同的值,也会显示所有点。除了数据点,我希望每个类别都有平均值。

例如,如果我有两个变量data set,其中一个变量(棉花重量百分比)是因素:

dat <- structure(list(`Tensile Strength` = c(12L, 19L, 17L, 7L, 25L, 
7L, 14L, 12L, 18L, 22L, 18L, 7L, 18L, 18L, 15L, 10L, 11L, 19L, 
11L, 19L, 15L, 19L, 11L, 23L, 9L), `Cotton weight percent` = c(20L, 
30L, 20L, 35L, 30L, 15L, 25L, 20L, 25L, 30L, 20L, 15L, 25L, 20L, 
15L, 35L, 35L, 25L, 15L, 25L, 35L, 30L, 35L, 30L, 15L)), .Names = c("Tensile Strength", 
"Cotton weight percent"), class = "data.frame", row.names = c(NA, 
-25L))

如何制作像这样的散点图:enter image description here

此处,实心点是个别观察结果,空心圆是平均观察到的拉伸强度。

3 个答案:

答案 0 :(得分:5)

这可以在ggplot2中使用geom_jitterstat_summary完成。具体来说,geom_jitter会在图表上显示黑点:

library(ggplot2)
ggplot(mtcars, aes(factor(cyl), mpg)) +
    geom_jitter(position = position_jitter(width = .1))
p

(&#34;抖动&#34;是根据x轴添加一些噪声,如示例所示)。

然后stat_summary图层可以为每个x值的平均值添加一个点(我已经变大了红色):

ggplot(mtcars, aes(factor(cyl), mpg)) +
    geom_jitter(position = position_jitter(width = .1)) +
    stat_summary(fun.y = "mean", geom = "point", color = "red", size = 3)

enter image description here

答案 1 :(得分:3)

使用原生R:

plot(dat[,1]~dat[,2],ylab="Tensile Strength",xlab="Cotton weight percent",cex=1.5)
points(sort(unique(dat[,2])),tapply(dat[,1],dat[,2],mean),pch=16,col=3,cex=1.5)

enter image description here

如果您想要显示重复的案例,您可以这样做:

cwp=sort(unique(dat[,2]))
ta=tapply(1:nrow(dat),list(dat[,2],dat[,1]),length)
ft=function(v,x){#
  nm=as.numeric(colnames(v))
  do.call(rbind,lapply(1:length(nm),function(zv)if(v[zv]>1)
    cbind(rep(x,v[zv])+seq(.6,1.4,length.out=v[zv])-1,nm[zv]) else c(x,nm[zv])))
}
fd=lapply(1:nrow(ta),function(z)ft(t(ta[z,!is.na(ta[z,])]),cwp[z]))
datf=do.call(rbind,fd)

plot(datf[,2]~datf[,1],ylab="Tensile Strength",xlab="Cotton weight percent",cex=1.5)
points(sort(unique(dat[,2])),tapply(dat[,1],dat[,2],mean),pch=16,col=3,cex=1.5)

enter image description here

答案 2 :(得分:1)

beeswarm包提供了一个很好的替代抖动点,而是提供了各种其他方法来安排你的点,让它看起来 - 除其他外 - 如下图所示:

see here for the beeswarm function used to create these plots

enter image description here