【问题标题】:How do I remove an extra line in a chart with ggplot如何使用 ggplot 在图表中删除多余的线
【发布时间】:2013-08-11 19:57:58
【问题描述】:

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

然后绘制图表。

我尝试了 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

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

【问题讨论】:

  • 如果您能提供实际的数据集,我将非常有帮助。
  • 我添加了其他信息。我希望这会有所帮助。

标签: r charts ggplot2 interaction


【解决方案1】:

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

当您使用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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2013-11-10
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多