分面显示时,忽略NA列

4

在我的绘图中,分面是通过两列实现的:

ggplot(peakDF, aes (Mass, Intensity)) + geom_line()+ facet_grid(file ~ fragment, scales = "free")

在片段列中,我有很多NA值,因此会生成一个包含这些NA的图形列,如下所示:

enter image description here

问题是我不想要这一列,但我不能简单地过滤掉这一列中的NA值,因为这会破坏我需要的行标准化。有什么建议可以保留整个数据集(进行标准化),但不绘制NA列?

规范化是什么意思?忽略scales=free或仅将其设置为free_x? - rawr
我的意思是,我希望在分面窗口中绘制的图形在y轴上的最大值为相应行中的最大值,包括NA列下的值。 - Pavel Shliaha
2个回答

2
您可以设置一个虚假的数据集来控制限制。在您的情况下,这应该很容易--只需按文件计算强度的最大值即可。或者您可以输入自定义限制,如下所示。
set.seed(1)
n <- 1e3
peakDF <- data.frame(Mass = rnorm(n, 500, 50),
                     Intensity = runif(n, 0, 10),
                     file = sample(letters[1:4], n, TRUE),
                     fragment = sample(letters[1:6], n, TRUE))
peakDF$fragment[1:(n/2)] <- NA

你现在拥有什么。
ggplot(peakDF, aes (Mass, Intensity)) +
  geom_line()+
  facet_grid(file ~ fragment, scales = "free")

enter image description here

使用 na.omit 并更改 file == 'a' 的上限。
ggplot(na.omit(peakDF), aes (Mass, Intensity)) +
  geom_line()+
  facet_grid(file ~ fragment, scales = "free") +
  geom_blank(data = data.frame(Mass = Inf,
                               fragment = 'a',
                               file = 'a',
                               Intensity = 15))

enter image description here

您可以同时添加多个控件。在您的情况下,您可以通过文件获取所有NA的最大值,并使用该汇总数据框。
ggplot(na.omit(peakDF), aes (Mass, Intensity)) +
  geom_blank(data = data.frame(Mass = rep(Inf, 4),
                               fragment = rep('a', 4),
                               file = c('a', 'a', 'c', 'd'),
                               Intensity = c(15, -5, 50, -5))) +
  geom_line()+
  facet_grid(file ~ fragment, scales = "free")

enter image description here

这也适用于x轴或者同时适用于x轴和y轴。

1

如果没有您的数据,要准确地完成这个任务是很困难的,但一个选项是将其转换为gtable对象,然后只需削减掉您不想要的额外列。

我的示例代码将使用R内置的mtcars

library(ggplot2)
library(gtable)
p<-ggplot(mtcars, aes(wt, hp)) + geom_point()+ facet_grid(cyl ~ carb, scales = "free")
gt<-ggplot_gtable(ggplot_build(p))

没有修剪
grid.draw(gt)

enter image description here

使用Trim
gt2<-gt[,-14]
grid.draw(gt2)

enter image description here

你可以看到,使用修剪,我们只是删掉了我们不需要的最后一列(第14列,其中包含8气缸图)。要找出要修剪哪一列,可以执行以下操作:
gtable_show_layout(gt)

使用这个功能,您可以将图表的特定方面与您想要删除的列匹配。enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接