我正试图绘制一些东西,但我无意中找不到我想要的任何教程或类似的图表。我尝试过python和R,如二进制时间线、chromomap或时间线图,但没有一个是正确的。希望你能帮我。所需的图为;
所以,这里我有4个不同的长度,在这个长度里,我想标记一些特定的positions.Let,比如我只想用三种不同的颜色来标记它。例如:
如果我在这里检测到一个位置范围,比方说对于Length_1,我想标记btw 3-7,我想用白色染色,我会在3-7之间给Length_1染色,或者其他颜色的位置。不同长度(Length_1、Length_2、Length_3、Length_4)相同。
绘制的数据如下所示:
谢谢。
发布于 2021-08-24 13:15:12
这是最新的答案。
请阅读如何准备示例数据集。发布图片而不是数据并没有多大帮助。
我想象你的数据,一定是这样的:
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'
)
)
有了这些数据之后,您需要应用一些转换。这完全是你个人品味的问题。我的做法如下:
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))
你现在的数据,如下所示:
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()
绘制数据是很容易的。
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
)
https://stackoverflow.com/questions/68907480
复制相似问题