首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在NumberLine海图上标注特定位置

在NumberLine海图上标注特定位置
EN

Stack Overflow用户
提问于 2021-08-24 12:20:29
回答 1查看 117关注 0票数 2

我正试图绘制一些东西,但我无意中找不到我想要的任何教程或类似的图表。我尝试过python和R,如二进制时间线、chromomap或时间线图,但没有一个是正确的。希望你能帮我。所需的图为;

所以,这里我有4个不同的长度,在这个长度里,我想标记一些特定的positions.Let,比如我只想用三种不同的颜色来标记它。例如:

如果我在这里检测到一个位置范围,比方说对于Length_1,我想标记btw 3-7,我想用白色染色,我会在3-7之间给Length_1染色,或者其他颜色的位置。不同长度(Length_1、Length_2、Length_3、Length_4)相同。

绘制的数据如下所示:

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-24 13:15:12

这是最新的答案。

请阅读如何准备示例数据集。发布图片而不是数据并没有多大帮助。

我想象你的数据,一定是这样的:

代码语言:javascript
运行
复制
dat <- data.frame(
    x = c('K', 'M', 'L', 'N'),   
    y = c(400, 200, 80, 1000),
    m = c(
        '410:419, 200:209', 
        '171:180, 15:24, 39:48', 
        '18:27', 
        '484:493, 200:209, 803:812'
        )
    )  

有了这些数据之后,您需要应用一些转换。这完全是你个人品味的问题。我的做法如下:

代码语言:javascript
运行
复制
dat <- dat |>
    mutate(m = strsplit(m, ',\\s*')) |>
    unnest(m) |>
    separate(m, c('ymin', 'ymax'), ':', , TRUE) |>
    mutate(
        h  = ymax - ymin,
        y2 = ymin + h / 2,
        ymin = NULL,
        ymax = NULL
    ) |>
    pivot_longer(c('y', 'y2')) |>
    mutate(
        x = factor(x, levels = sort(unique(x), TRUE)),
        h = ifelse(name == 'y', value, h),
        y = ifelse(name == 'y', value / 2, value),
        w = .95,
        f = ifelse(name == 'y', '#4472c4', heat.colors(100, .5)[cut(y + h / 2, 100)])
    ) |>
    select(x, y, h, w, f) |>
    distinct() |>
    arrange(x, desc(h))

你现在的数据,如下所示:

代码语言:javascript
运行
复制
dat

# # A tibble: 13 × 5
#    x         y     h     w f        
#    <fct> <dbl> <dbl> <dbl> <chr>    
# 1  N     500    1000  0.95 #4472c4  
# 2  N     488.      9  0.95 #FFA50080
# 3  N     204.      9  0.95 #FF3E0080
# 4  N     808.      9  0.95 #FFFF3880
# 5  M     100     200  0.95 #4472c4  
# 6  M     176.      9  0.95 #FF340080
# 7  M      19.5     9  0.95 #FF000080
# 8  M      43.5     9  0.95 #FF070080
# 9  L      40      80  0.95 #4472c4  
# 10 L      22.5     9  0.95 #FF000080
# 11 K     200     400  0.95 #4472c4  
# 12 K     414.      9  0.95 #FF8A0080
# 13 K     204.      9  0.95 #FF3E0080

现在,在清除数据之后,使用geom_tile()绘制数据是很容易的。

代码语言:javascript
运行
复制
dat |>
    ggplot(aes(x = x, y = y, height = h, width = w)) +
    geom_tile(fill = dat$f, show.legend = FALSE) +
    ggtitle('Stack question #6890748♡') +
    coord_flip() +
    theme_void() +
    theme(
        axis.text  = element_text(face = 'italic', size = 12, colour = 'gray50'),
        axis.line.x  = element_line(colour = 'gray10', size = .25),
        axis.ticks.x = element_line(colour = 'gray10', size = .25, ),
        axis.ticks.length.x = unit(2, 'points'),
        aspect.ratio = 7 / 16 
    )

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

https://stackoverflow.com/questions/68907480

复制
相关文章

相似问题

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