首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用geom_text避免重叠标签

使用geom_text避免重叠标签
EN

Stack Overflow用户
提问于 2021-03-23 14:31:08
回答 1查看 1.2K关注 0票数 1

我使用geom_line显示不同国家的比率。是否有办法避免国家标签相互重叠,或将重叠的国家标签横向移动一些。

代码语言:javascript
复制
ggplot(df,aes(x=year, y = value, group = country, colour=country) ) +
  geom_line(size=1.3) +
  geom_text(data = df %>% filter(year == last(year)), aes(label = country, 
                                                                        x = year + 0.5, 
                                                                        y = value, 
                                                                        color = country), size=3) +
  guides(color = FALSE) + theme_bw()

以下是数据:

代码语言:javascript
复制
   df<- structure(list(year = c(2015, 2020, 2025, 2030, 2035, 2015, 2020, 
2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 
2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 
2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 
2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 
2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 
2025, 2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 
2030, 2035, 2015, 2020, 2025, 2030, 2035, 2015, 2020, 2025, 2030, 
2035, 2015, 2020, 2025, 2030, 2035), country = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 
7L, 7L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 
10L, 10L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 13L, 
13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 14L, 15L, 15L, 15L, 15L, 
15L, 16L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 17L, 18L, 18L, 
18L, 18L, 18L), .Label = c("USA", "CAN", "MEX", "JPN", "ANZ", 
"EUR", "ROE", "RUS", "ASI", "CHN", "IND", "BRA", "AFR", "MES", 
"LAM", "REA", "KOR", "IDZ"), class = "factor"), value = c(19.35, 
17.77, 16.19, 15.07, 13.7, 17.91, 16.3, 14.7, 13.58, 12.58, 17.91, 
16.3, 14.7, 13.58, 12.58, 0.91, 5.9, 10.88, 17.41, 16.93, NA, 
NA, NA, NA, NA, 26.79, 24, 21.22, 19.15, 17.24, 11.11, 11.16, 
11.2, 10.93, 11.16, 18.53, 17.41, 16.29, 16.63, 19.26, 4.05, 
4.78, 5.51, 6.42, 6.95, 2.9, 3.97, 5.04, 6.32, 7.67, 2.71, 2.69, 
2.68, 3.34, 4.09, 2.53, 2.34, 2.14, 3.23, 4.25, 1.54, 1.42, 1.3, 
2.13, 2.1, 0.26, 1.83, 3.4, 3.05, 3.99, 0.8, 0.76, 0.72, 0.91, 
1.38, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA)), row.names = c(NA, -90L), class = c("tbl_df", "tbl", "data.frame"
))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-23 14:43:04

如果在调用check_overlap = TRUE时使用参数geom_text,那么就会丢失重叠,但也会丢失重叠标签之一;我想这不是您想要的,但万一是这样的话:这是代码和结果的情节:

代码语言:javascript
复制
ggplot(df,aes(x = year, y = value, group = country, colour = country) ) +
  geom_line(size = 1.3) +
  geom_text(data = df %>% filter(year == last(year)), 
            aes(label = country, x = year+0.5, y = value, color = country), 
            size = 3,
            check_overlap = TRUE) +    ###### Here is the change #######
    guides(color = FALSE) + 
  theme_bw() 

您可以看到,例如,在3行顶部,EUR的标签缺失(由于check_overlap,该标签已被设置为“TRUE”)。

作为另一种,您可以使用以下代码。在这里,geom_text()geom_text_repel替换,参数保持不变。后一项职能是根据小插曲进行下列工作:

文本标签彼此排斥,远离数据点。

以下代码.:

代码语言:javascript
复制
ggplot(df,aes(x = year, y = value, group = country, colour = country) ) +
geom_line(size = 1.3) +
geom_text_repel(data = df %>% filter(year == last(year)),  #### here ####
                aes(label = country, x = year+0.5, y = value, color = country), size = 3) +
guides(color = FALSE) + 
theme_bw()

..。产生以下情节:

你可以和hjustvjust玩上几周,就像它说的那样:

  • 支持参数the和the,但它们只控制初始位置,因此排斥力可能会破坏对齐。如果标签只通过使用方向= "y“向上和向下移动,则与hjust的对齐将被保留。对于use,使用direction = "x".

拜托,让我知道这是不是你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66765232

复制
相关文章

相似问题

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