如何在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))
如何制作像这样的散点图:
此处,实心点是个别观察结果,空心圆是平均观察到的拉伸强度。
答案 0 :(得分:5)
这可以在ggplot2中使用geom_jitter
和stat_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)
答案 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)
如果您想要显示重复的案例,您可以这样做:
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)
答案 2 :(得分:1)
beeswarm包提供了一个很好的替代抖动点,而是提供了各种其他方法来安排你的点,让它看起来 - 除其他外 - 如下图所示:
(see here for the beeswarm function used to create these plots)