如何在用ggplot绘图时抑制警告
当把缺失值传递给ggplot的时候,它非常友善,并警告我们他们在场。 在交互式会话中这是可以接受的,但是在编写报告时,输出不会混杂在警告中,特别是在有很多警告的时候。 下面的例子有一个标签丢失,这会产生一个警告。
library(ggplot2) library(reshape2) mydf <- data.frame( species = sample(c("A", "B"), 100, replace = TRUE), lvl = factor(sample(1:3, 100, replace = TRUE)) ) labs <- melt(with(mydf, table(species, lvl))) names(labs) <- c("species", "lvl", "value") labs[3, "value"] <- NA ggplot(mydf, aes(x = species)) + stat_bin() + geom_text(data = labs, aes(x = species, y = value, label = value, vjust = -0.5)) + facet_wrap(~ lvl)
如果我们用最后一个expression式来suppressWarnings
警告,我们会得到一个有多less警告的摘要。 为了争辩,让我们说这是不可接受的(但确实是非常诚实和正确的)。 打印ggplot2对象时如何(完全)抑制警告?
一个更有针对性的绘图方法是将na.rm=TRUE
添加到您的绘图调用中。 例如:
ggplot(mydf, aes(x = species)) + stat_bin() + geom_text(data = labs, aes(x = species, y = value, label = value, vjust = -0.5), na.rm=TRUE) + facet_wrap(~ lvl)
您需要在print()
调用周围suppressWarnings()
ggplot()
,而不是创buildggplot()
对象:
R> suppressWarnings(print( + ggplot(mydf, aes(x = species)) + + stat_bin() + + geom_text(data = labs, aes(x = species, y = value, + label = value, vjust = -0.5)) + + facet_wrap(~ lvl))) R>
将最终的图分配给一个对象然后print()
可能会更容易。
plt <- ggplot(mydf, aes(x = species)) + stat_bin() + geom_text(data = labs, aes(x = species, y = value, label = value, vjust = -0.5)) + facet_wrap(~ lvl) R> suppressWarnings(print(plt)) R>
行为的原因是警告只在绘图时才会生成,而不是在创build绘图的对象时生成。 R会在交互式使用过程中自动打印,所以
R> suppressWarnings(plt) Warning message: Removed 1 rows containing missing values (geom_text).
不起作用,因为实际上,您正在调用print(suppressWarnings(plt))
,而
R> suppressWarnings(print(plt)) R>
确实有效,因为suppressWarnings()
可以捕获print()
调用产生的警告。
在你的问题中,你提到报告写作,所以设置全球警报级别可能会更好:
options(warn=-1)
默认是:
options(warn=0)