如何在R中的不同面生成不同的几何图形?

如何在R中的不同面生成不同的几何图形?,r,ggplot2,facet-wrap,geom-hline,R,Ggplot2,Facet Wrap,Geom Hline,我试图在数据集的两个不同面上生成两种不同颜色的几何图形。我这样做是为了突出两个不同方面的手段 以下是数据集: Pclass Sex Age SibSp Parch Fare Cabin Embarked Survived 3 male 22 1 0 7.25 S 0 1 female 38 1 0 71.2833 C85

我试图在数据集的两个不同面上生成两种不同颜色的几何图形。我这样做是为了突出两个不同方面的手段

以下是数据集:

Pclass  Sex    Age  SibSp   Parch   Fare    Cabin   Embarked    Survived
  3     male    22   1        0     7.25                S          0    
  1     female  38   1        0    71.2833   C85        C          1
  3     female  26   0        0     7.925               S          1    
  1     female  35   1        0    53.1     C123        S          1
  3     male    35   0        0     8.05                S          0    
  1     male    54   0        0    51.8625   E46        S          0
代码如下:

g<-ggplot(data = train3, aes(x = Age, y = Survived, colour = factor(Pclass)))
g<-g+facet_wrap(~Sex)
g<-g+geom_point(size = 4, alpha = 0.2)+ggtitle("Survival by Gender")+theme(plot.title = element_text(hjust = 0.5))
g<-g+geom_vline(data = subset(train3,Sex=="female"), xintercept = mean(train3[which(train3$Sex=="female"),3]), colour = "pink", size = 1)
g<-g+geom_vline(data = subset(train3,Sex=="male"), xintercept = mean(train3[which(train3$Sex=="male"),3]), colour = "blue", size = 1)
g

以下是如何为不同的虹膜物种输入不同的
geom\u vline

ggplot(iris, aes(Sepal.Length, Petal.Length)) + facet_wrap(~Species, scales="free") + geom_point() + 
  geom_vline(data=filter(iris, Species=="setosa"), aes(xintercept=5), colour="pink") + 
  geom_vline(data=filter(iris, Species=="versicolor"), aes(xintercept=6), colour="blue") + 
  geom_hline(data=filter(iris, Species=="virginica"), aes(yintercept=6), colour="green") 

您可以创建一个data.frame,其中一列是用于行的截取值,另一列是带有性别的截取值。这样,当使用面_包裹时,它们是分开的。
比如:

dataInt <- train3 %>%
  group_by(Sex) %>%
  summarize(Int = mean(Age))
dataInt%
按性别划分的组别%>%
汇总(Int=平均值(年龄))
然后您可以在脚本中使用它:

g<-ggplot(data = train3, aes(x = Age, y = Survived, colour = factor(Pclass))) + 
  facet_wrap(~Sex) +
  geom_vline(data=dataInt, aes(xintercept=Int))
g%
总结(平均值×平均值(萼片长度))
ggplot(iris)+
aes(x=萼片长度,y=花瓣长度)+
面_包裹(面=变量(种类))+
几何点()
地理线(数据=数据线,aes(xintercept=平均值,颜色=物种))

建立在上文@Sébastien Rochette的答案之上;与其使用summary(Int=mean(Age))函数创建一个新的数据帧dataInt,这对我来说不起作用,因为我在每个方面图中有多个级别,不如使用mutate

train3 <- train3 %>%
  group_by(Sex) %>%
  mutate(Int = mean(Age))
train3%
按性别划分的组别%>%
突变(Int=平均值(年龄))
然后您可以在中使用train3数据帧

g<-ggplot(data = train3, aes(x = Age, y = Survived, colour = factor(Pclass))) + 
  facet_wrap(~Sex) +
  geom_vline(data=train3, xintercept=Int)

greproducible示例。图例!!显然,
data
调用中的子集函数不起作用。很高兴发现过滤器起作用了。谢谢你的快速帮助。非常感谢。我认为错误是由于
xintercept
中未说明的
xintercept
?比较
geom\u vline(数据=子集(虹膜,物种=“setosa”)、aes(xintercept=5)、color=“pink”)
geom\u vline(数据=子集(虹膜,物种=“setosa”)、xintercept=5,color=“pink”)
这适用于3个方面,但是有什么方法可以有效地处理大量的方面吗?这看起来比使用summary(Int=mean(Age))函数创建新的数据集dataInt更容易处理多个方面,因为summate(Int=mean(Age))对我不起作用,所以改用mutate。
g<-ggplot(data = train3, aes(x = Age, y = Survived, colour = factor(Pclass))) + 
  facet_wrap(~Sex) +
  geom_vline(data=train3, xintercept=Int)