如何在R中的不同方面生成不同的geom_vline?

Piy*_*rma 9 r ggplot2 facet-wrap geom-hline

我试图在数据集的2个不同方面生成2种不同颜色的不同geom_vlines.我这样做是为了强调两个不同方面的方法.

这是数据集:

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
Run Code Online (Sandbox Code Playgroud)

这是代码:

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
Run Code Online (Sandbox Code Playgroud)

这是输出

在此输入图像描述

我实际上想在每个方面只生产1个vline:女性粉红色,男性蓝色.

这里给出的建议也不起作用.错误显示为:

Error in .(Sex == "female") : could not find function "."
Run Code Online (Sandbox Code Playgroud)

Ada*_*uek 14

以下是您可以geom_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") 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这对于3个方面都适用,但是对于大量的方面,有什么办法可以有效地做到这一点吗? (2认同)

Séb*_*tte 10

您可以创建一个data.frame,其中一列是拦截值,用于行,第二列是Sex.因此,当使用facet_wrap时,它们是分开的.
就像是:

dataInt <- train3 %>%
  group_by(Sex) %>%
  summarize(Int = mean(Age))
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的脚本中使用它:

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

没有你的数据,我无法测试.