如何使用ggplot删除图表中的额外行

时间:2013-08-11 19:57:58

标签: r charts ggplot2 interaction

我是一个新的R用户,我正在尝试绘制2个连续变量和分类变量之间的交互。

使用interaction.plot:

interaction.plot(nonconform, trans, employdisc, type="b", col=(1:3) ,
             leg.bty="o", leg.bg="beige", lwd=2, pch=c(18,24,22),
             xlab="Nonconformity",
             ylab="Discrimination",
             main="Interaction Plot")

我得到了这个结果:

interaction plot

当我尝试用ggplot

做同样的事情时
ggplot(data=NTDS.zip, aes(x=nonconform, y=employdisc, colour = factor(trans), group=trans, )) + 
            stat_summary(fun.y=mean, geom="point") + 
            stat_summary(fun.y=mean, geom="line")

我得到了这个结果:

ggplot chart

还有一条额外的线条(灰色,我无法摆脱)。它可能代表缺失的数据,但还没有找到从图表中删除该行的方法。我发现的任何讨论都谈到了由于数据缺失而导致的警告,但没有关于图表中额外行的讨论。

有什么想法吗?

更新

在阅读R Graphics Cookbook之后,我尝试了另一种方法。

这本书的方法包括首先总结数据。

tg <- ddply(ntds.new, c("trans", "nonconform"), summarize, empdisc=mean(employdisc))

然后绘制图表。

我尝试了两种类型(颜色和线型)

ggplot(tg, aes(x=nonconform, y=empdisc, colour=trans))+geom_line() 
ggplot(tg, aes(x=nonconform, y=empdisc, linetype=trans))+geom_line()

带有color语句的图表有额外的行,而带有linetype的图表没有。

这个数据是:

trans   nonconform  empdisc
1   1   0   1.104046
2   1   1   1.472050
3   1   2   1.930070
4   1   3   2.247706
5   1   4   3.407407
6   1   NA  7.250000
7   2   0   3.427230
8   2   1   3.929707
9   2   2   4.062275
10  2   3   4.373853
11  2   4   4.470149
12  2   NA  5.294118
13  3   0   1.309524
14  3   1   1.968310
15  3   2   2.366589
16  3   3   3.815000
17  3   4   3.560606
18  3   NA  6.000000
19  4   0   2.661290
20  4   1   3.208861
21  4   2   3.033195
22  4   3   3.322176
23  4   4   3.755906
24  4   NA  6.625000
25  NA  0   4.000000
26  NA  1   4.166667
27  NA  2   2.500000
28  NA  3   6.666667
29  NA  4   5.400000
30  NA  NA  2.000000

我回去删除了(10)行,其中包含trans或nonconform列的缺失案例。

trans   nonconform  empdisc
1   1   0   1.104046
2   1   1   1.472050
3   1   2   1.930070
4   1   3   2.247706
5   1   4   3.407407
6   2   0   3.427230
7   2   1   3.929707
8   2   2   4.062275
9   2   3   4.373853
10  2   4   4.470149
11  3   0   1.309524
12  3   1   1.968310
13  3   2   2.366589
14  3   3   3.815000
15  3   4   3.560606
16  4   0   2.661290
17  4   1   3.208861
18  4   2   3.033195
19  4   3   3.322176
20  4   4   3.755906

这解决了我最初的问题,但是这个解决方案看起来比它本来应该更复杂,我很好奇为什么用&#34; color&#34;受到了影响,并且有一个&#34; linetype&#34;未获得#39;吨。

1 个答案:

答案 0 :(得分:1)

如果我们在表tg中查看您的数据,那么变量trans就会有NA值。

当您使用trans(因子)作为线条的颜色时,也会绘制NA值,因为对于色阶,NA级别的默认操作是将它们绘制成grey50颜色({{ 1}})。但对于线型比例,NA级别的默认操作是绘制空行(na.value="grey50"),因此您看不到该行。

要解决这个问题,有几种解决方案。首先,您可以添加na.value="blank"并将scale_color_discrete()设置为NA。

na.value=

另一种解决方案是对数据进行子集化,以从数据中删除NA值,然后绘制数据。这也可以在ggplot(tg, aes(x=nonconform, y=empdisc, colour=as.factor(trans)))+ geom_line()+ scale_color_discrete(na.value=NA) 电话中完成。

ggplot()

enter image description here