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