Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 显示具有相同值的所有点的散点图_R_Plot_Statistics_Scatter Plot - Fatal编程技术网

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

R 显示具有相同值的所有点的散点图,r,plot,statistics,scatter-plot,R,Plot,Statistics,Scatter Plot,我如何在R中创建散点图,以便即使在某些类别中有相同的值,所有点都显示在那里。除了数据点之外,我还希望得到每个类别的平均值 例如,如果我有两个变量,其中一个(棉花重量百分比)是因子: 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, 11

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

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

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))

dat这可以在ggplot2中使用
geom\u jitter
stat\u summary
完成。具体地说,
geom_jitter
将为您提供图形上的黑点:

library(ggplot2)
ggplot(mtcars, aes(factor(cyl), mpg)) +
    geom_jitter(position = position_jitter(width = .1))
p
(抖动是指在x轴上增加一些噪声,如示例中所示)

然后,
stat\u summary
层允许您为每个x值的平均值添加一个点(我将其设置为大红色):


这可以在ggplot2中使用
geom\u jitter
stat\u summary
完成。具体地说,
geom_jitter
将为您提供图形上的黑点:

library(ggplot2)
ggplot(mtcars, aes(factor(cyl), mpg)) +
    geom_jitter(position = position_jitter(width = .1))
p
(抖动是指在x轴上增加一些噪声,如示例中所示)

然后,
stat\u summary
层允许您为每个x值的平均值添加一个点(我将其设置为大红色):

使用本机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)
使用本机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)

该软件包提供了一个很好的替代抖动点的方法,而不是提供多种其他方法来排列点,以使其看起来(除其他外)如下图所示:

()

该软件包提供了一个很好的替代抖动点的方法,而不是提供多种其他方法来排列点,以使其看起来(除其他外)如下图所示:

()


@Legazeit不错,你是如何得到棉花重量百分比的?(手动?@LegalizeIt我错过了OP发布数据集的机会,谢谢!!非常感谢。我在我的数据集上试过了,效果很好。它与我随附的散点图类似,但有一点我想改进——相同值的点不仅沿x轴移动,而且沿y轴移动。我希望它们在y轴上的值相同,但只在x轴上分开。你知道我怎么做吗?@user23709绝对,只需将
geom_抖动(位置=…)
更改为
geom_点()
@lagizeit很好,你是如何得到棉花重量百分比的?(手动?@LegalizeIt我错过了OP发布数据集的机会,谢谢!!非常感谢。我在我的数据集上试过了,效果很好。它与我随附的散点图类似,但有一点我想改进——相同值的点不仅沿x轴移动,而且沿y轴移动。我希望它们在y轴上的值相同,但在x轴上只分开。你知道我怎么做吗?@user23709绝对,只需将
geom_抖动(位置=…)
更改为
geom_点()
谢谢。这是我知道如何做的,但它没有显示所有数据点(那些值相同的数据点)。谢谢。这就是我知道如何做的,但它并没有显示所有数据点(具有相同值的数据点)。