使用facet_wrap有多个因素

时间:2013-11-20 17:15:33

标签: r ggplot2

以下是我的数据框WetNmaPso

   Saison Site Category    NbWB_m2  NbWP_m2 mean_PercentCover
2     Wet   SW  CCA_Nma 19.3333333 7.000000       0.072833333
4     Wet   SW  CCA_Pso  0.8333333 0.000000       0.002500000
18    Wet   BY  CCA_Nma  0.0000000 2.666667       0.001166667
20    Wet   BY  CCA_Pso  3.1666667 1.333333       0.007666667
34    Wet   WF  CCA_Nma  3.5000000 3.333333       0.010333333
36    Wet   WF  CCA_Pso  0.0000000 0.000000       0.000000000
50    Wet   MP  CCA_Nma  0.1666667 0.500000       0.004666667
52    Wet   MP  CCA_Pso  0.0000000 0.000000       0.000000000
66    Wet   PK  CCA_Nma  0.0000000 0.000000       0.000500000
68    Wet   PK  CCA_Pso 20.8333333 2.000000       0.063000000
82    Wet   DB  CCA_Nma  0.0000000 0.000000       0.000000000
84    Wet   DB  CCA_Pso  2.8333333 8.333333       0.017833333

我们的想法是针对每个类别针对NbWB_m2绘制mean_PercentCover,为每个类别使用不同的颜色,为每个网站使用不同的符号。

这是脚本:

y <-WetNmaPso$NbWB_m2
x <-WetNmaPso$mean_PercentCover
library(ggplot2)
PlotNmaPso<-ggplot(WetNmaPso,aes(x=x,y=y))+
stat_smooth(method="lm",
aes(color=Category))+
geom_point(aes(color=Category,shape=Site))   

plot1

现在是我的问题。如何为每个类别制作单独的图并保持正确的颜色和正确的符号?我曾试图使用face_wrap但不知何故它混淆了我的数据点。这是我一直在努力做的事情:

Individual_plots<-PlotNmaPso + facet_wrap(~Category)

plot2

结果图显示了每个类别的两个单独的图表,这些图表很好,但数据点不正确,并且符号在两个类别之间混合。 我尝试了不同的东西,但从未得到预期的结果。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

我认为这些点未正确显示,因为您需要在geom_point()函数中插入x和y。

例如:

ggplot(WetNmaPso) + geom_point(data=WetNmaPso,aes(y=NbWB_m2,x=mean_PercentCover,color=Category,shape=Site,size=7)) + stat_smooth(method="lm",aes(y=NbWB_m2,x=mean_PercentCover,color=Category)) + facet_grid(. ~ Category)

enter image description here

在Excel中使用散点图获得相同的结果,分别绘制每个类别。

答案 1 :(得分:0)

以下代码段

ggplot(WetNmaPso, aes(x=NbWB_m2, y=mean_PercentCover, color=factor(Category))) +
  geom_point(aes(shape=factor(Site)), size=5) +
  stat_smooth(method="lm", size=1.2)+facet_wrap(~Category) +
  scale_shape_discrete(name="Site") + 
  scale_color_discrete(name="Category")

生成这个,看起来像你想要的那样:

注意:

  1. 您的脚本失败了,因为您创建了向量x和y 分别。第一个调用ggplot(WetNmaPso,...)将WetNmaPso设置为默认值 数据集。从那时起aes(...)内的所有引用都将是 WetNmaPso的列,除非您在a中明确指定新数据集 未来通话(例如geom_point(data=some.other.df,...)
  2. 在第一次color=factor(Category)通话中设置ggplot(...)会导致此问题 分组以适用于之后的所有内容,除非明确说明 改变。
  3. 最后两次通话(至scale_*)仅更改图例标题。
  4. 最后,无论它的价值如何,将lm拟合到这样的数据上 因为NbWB_m2~20的分数非常高而充满了 的杠杆作用。