Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在镶嵌面时抑制NA列_R_Ggplot2 - Fatal编程技术网

R 在镶嵌面时抑制NA列

R 在镶嵌面时抑制NA列,r,ggplot2,R,Ggplot2,在我的绘图中,分面由两列进行: ggplot(peakDF, aes (Mass, Intensity)) + geom_line()+ facet_grid(file ~ fragment, scales = "free") 在片段列中,我有很多NA值,因此使用这些NAs生成一列图,如下所示: 问题是我不想要这个列,但我不能简单地过滤这个列中的NA值,因为这将删除我真正需要的规范化(跨行)。关于如何保留整个数据集(用于规范化),但不绘制NA列,有什么建议吗?如果没有数据,很难做到这一点,但

在我的绘图中,分面由两列进行:

ggplot(peakDF, aes (Mass, Intensity)) + geom_line()+ facet_grid(file ~ fragment, scales = "free")
在片段列中,我有很多NA值,因此使用这些NAs生成一列图,如下所示:


问题是我不想要这个列,但我不能简单地过滤这个列中的NA值,因为这将删除我真正需要的规范化(跨行)。关于如何保留整个数据集(用于规范化),但不绘制NA列,有什么建议吗?

如果没有数据,很难做到这一点,但一种选择是将其转换为
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)
gt2<-gt[,-14]
grid.draw(gt2)
使用此选项,您可以将绘图的特定面与要删除的
gtable
中的列相匹配。

您可以设置一个伪数据集来控制限制。这在您的情况下应该很容易——只需通过
文件
计算
强度
的最大值即可。或者,您可以像下面这样输入自定义限制

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

使用
na。省略
并更改
文件的上限=='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))

您可以同时添加多个控件。在您的情况下,您可以通过文件获取
NA
s的最大值,并使用该摘要数据框

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")


这也适用于x轴或x轴和y轴。

标准化是什么意思?省略scales=free或仅设置为free_x?我的意思是,我希望刻面窗口中的绘图以y轴上的最大值作为对应行中的最大值进行绘制,包括刻面中NA列下的值
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))
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")