首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ggplot中堆叠标签

在ggplot中堆叠标签
EN

Stack Overflow用户
提问于 2019-01-21 19:29:42
回答 1查看 41关注 0票数 1

我正在构建经验ROC曲线,并被一些看起来不太明智的曲线所困扰。我使用的是geom_text_repel,但它们只是为了彼此接近。我想知道是否有人能提供一些合理的解决方案。

数据:

代码语言:javascript
复制
    structure(list(sens = c(0, 0.2, 0.2, 0.4, 0.4, 0.4, 0.4, 0.4, 
0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.7, 0.7, 1), one_min_spec = c(0, 
0, 0, 0.021, 0.021, 0.021, 0.041, 0.041, 0.041, 0.041, 0.041, 
0.041, 0.041, 0.041, 0.062, 0.062, 0.108, 0.17, 0.183, 1), cut_point = c(NA, 
18L, 17L, 16L, 15L, 14L, 13L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 
5L, 4L, 3L, 2L, 1L, NA)), row.names = c(1L, 12156L, 11470L, 10784L, 
10098L, 9412L, 8726L, 8040L, 7354L, 6668L, 5982L, 5296L, 4610L, 
3924L, 3238L, 2552L, 1866L, 1180L, 494L, 20L), class = "data.frame")

和绘图代码:

代码语言:javascript
复制
ggplot(df, aes(one_min_spec, sens, label = cut_point)) +
  geom_abline(
    intercept = 0,
    slope = 1,
    color = "black",
    linetype = "dashed"
  ) +
  geom_path(colour = "gray") +
  geom_point(colour = "black") +
  geom_text_repel(size = 4) +
  scale_y_continuous(limits = c(0, 1),
                     expand = c(0, 0)) +
  scale_x_continuous(limits = c(0, 1),
                     expand = c(0, 0)) +
  theme(text = element_text(size = 14))  

我在想,也许可以尝试为每个点创建一个单独的标签,而不是如果它们在ROC空间中共享同一个点,则为它们创建多个标签。即,在这种情况下,它将是单个标签6-13,而不是所有的切割点都具有一个。我真的不确定该怎么做,这样做有意义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 12:50:37

如果你想把切点压缩成一个标签,这里有一种方法:

代码语言:javascript
复制
library(dplyr)

df2 <- df %>% 
  group_by(one_min_spec, sens) %>% 
  summarise(cut_point = ifelse(all(is.na(cut_point)),
                               "",
                               range(cut_point, na.rm = TRUE) %>%
                                 unique() %>%
                                 paste(collapse = "-"))) %>%
  ungroup()

> df2
# A tibble: 9 x 3
  one_min_spec  sens cut_point
         <dbl> <dbl> <chr>    
1        0       0   ""       
2        0       0.2 17-18    
3        0.021   0.4 14-16    
4        0.041   0.4 6-13     
5        0.062   0.5 4-5      
6        0.108   0.5 3        
7        0.17    0.7 2        
8        0.183   0.7 1        
9        1       1   ""  

这个经过处理的数据框将与您的原始ggplot()代码一起工作。为了说明,我在下面对其进行了一些简化:

代码语言:javascript
复制
ggplot(df2, aes(one_min_spec, sens, label = cut_point)) +
  geom_abline(linetype = "dashed") + # the rest are the same as default options anyway
  geom_path(colour = "gray") +
  geom_point(colour = "black") +
  geom_text_repel(size = 4)

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

https://stackoverflow.com/questions/54289037

复制
相关文章

相似问题

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