0

我是一个新的 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")

我得到这个结果:

交互图

当我尝试用 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 图表

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

有什么想法吗?

更新

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

这本书的方法首先是对数据进行总结。

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

然后绘制图表。

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

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

带有颜色语句的图有额外的线,而带有线型的图没有。

这方面的数据是:

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

这解决了我最初的问题,但这个解决方案似乎比它应该的更复杂,我很好奇为什么带有“颜色”的情节受到影响,而带有“线型”的情节却没有。

4

1 回答 1

0

如果我们在表中查看您的数据,tg则变量有 NA 值trans

当您将trans(作为因子)用于线条的颜色时,还会绘制这些 NA 值,因为对于色标,NA 级别的默认操作是以grey50颜色 ( na.value="grey50") 绘制它们。但是对于线型缩放 NA 级别的默认操作是绘制空白行 ( na.value="blank"),因此您看不到该行。

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

ggplot(tg, aes(x=nonconform, y=empdisc, colour=as.factor(trans)))+
  geom_line()+
  scale_color_discrete(na.value=NA)

另一种解决方案是对数据进行子集化以从数据中删除 NA 值,然后绘制数据。这也可以在ggplot()通话中完成。

ggplot(tg[complete.cases(tg),], aes(x=nonconform, y=empdisc, colour=as.factor(trans)))+
  geom_line()

在此处输入图像描述

于 2013-08-15T06:09:51.087 回答