我是一个新的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")
我得到了这个结果:
还有一条额外的线条(灰色,我无法摆脱)。它可能代表缺失的数据,但还没有找到从图表中删除该行的方法。我发现的任何讨论都谈到了由于数据缺失而导致的警告,但没有关于图表中额外行的讨论。
有什么想法吗?
更新
在阅读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;吨。
答案 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()