首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ggrepel抑制警告

如何用ggrepel抑制警告
EN

Stack Overflow用户
提问于 2021-04-07 08:55:22
回答 2查看 3.3K关注 0票数 8

ggrepel允许避免重叠的文本标签,因为彼此之间的标签太近了。

该算法依赖于查看窗口大小,并且在更改窗口大小时会发生回调。

如果算法无法避免给定窗口大小的重叠,则会发出警告:

代码语言:javascript
复制
Warning messages:
1: ggrepel: 178 unlabeled data points (too many overlaps). Consider increasing max.overlaps

我想抑制这些警告,而不依赖于max.overlaps的值,因为它们可能会延迟或脱离上下文。

延迟的原因可能是第一次打印后或更改查看窗口宽度后的回调,请参见下面的示例:

代码语言:javascript
复制
library(ggplot2)
library(ggrepel)

N <- 50
data <- data.frame(x=1:N,y=rep(1,N),label =  paste0("Text",1:N))

ggplot(data)+
  geom_point(aes(x=x,y=y))+
  geom_text_repel(aes(x=x,y=y,label=label),hjust=0, vjust=0, box.padding = 0.5, max.overlaps = 20)

# If the viewing window width is OK, no warning!

#  Execute anything in console
1
#[1] 1
# This is OK!

代码语言:javascript
复制
# Now reduce window width with mouse

# No warning yet

# Execute anything in console
1
# Warning messages:
#   1: ggrepel: 41 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 2: ggrepel: 41 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 3: ggrepel: 41 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 4: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 5: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 6: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 7: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 8: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
# 9: ggrepel: 47 unlabeled data points (too many overlaps). Consider increasing max.overlaps 
#[1] 1

我尝试了suppressWarningswithCallingHandlers,但没有结果:

代码语言:javascript
复制
withCallingHandlers(
  suppressWarnings(ggplot(data)+
    geom_point(aes(x=x,y=y))+
    geom_text_repel(aes(x=x,y=y,label=label),hjust=0, vjust=0, box.padding = 0.5, max.overlaps = 20)
    )
,  warning=function(w) {
  if( any( grepl( "ggrepel", w) ) ) invokeRestart( "muffleWarning" )
})
EN

回答 2

Stack Overflow用户

发布于 2022-06-20 11:14:49

可以忽略警告消息,方法是将全局警告级别设置如下:

options(warn=-1)

票数 0
EN

Stack Overflow用户

发布于 2022-07-25 21:05:54

您可以通过设置“最大重叠”来做到这一点:

代码语言:javascript
复制
options(ggrepel.max.overlaps = Inf)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66982681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档