在 ggplot2 中的 geom_segment 旁边添加文本
Add text next to geom_segment in ggplot2
您好,我有一个 df,例如:
tab
X molecule gene start_gene end_gene start_scaff end_scaff strand direction COL1 COL2
1 7 scaffold_1254 G7 6708 11967 1 20072 backward -1 10 20
2 5 scaffold_7638 G5 9567 10665 1 15336 backward -1 18 1
3 4 scaffold_7638 G4 3456 4479 1 15336 forward 1 18 1
4 2 scaffold_15158 G2 10105 10609 1 13487 backward -1 5 9
5 6 scaffold_8315 G6 2760 3849 1 10827 forward 1 25 7
6 3 scaffold_7180 G3 9814 10132 1 10155 backward -1 21 9
7 1 scaffold_74038 G1 1476 2010 1 2010 forward 1 8 34
到目前为止,这段代码:
ggplot(tab, aes(x = start_scaff, xend = end_scaff,
y = molecule, yend = molecule)) +
geom_segment(size = 3, col = "grey80") +
geom_segment(aes(x = ifelse(direction == 1, start_gene, end_gene),
xend = ifelse(direction == 1, end_gene, start_gene)),
data = tab,
arrow = arrow(length = unit(0.1, "inches")), size = 2) +
geom_text_repel(aes(x = start_gene, y = molecule, label = gene),
data = tab, nudge_y = 0.5,size=2) +
scale_y_discrete(limits = rev(levels(tab$molecule))) +
theme_minimal()
我设法得到了这个情节:
我想知道是否有一种方法可以在 geom_segment 旁边添加带有 COL1
和 COL2
值的文本,并根据阈值为文本着色:绿色值 > 10、红色值 <= 10
得到类似
的东西
dput(tab)
structure(list(X = c(7L, 5L, 4L, 2L, 6L, 3L, 1L), molecule = structure(c(1L,
5L, 5L, 2L, 6L, 3L, 4L), .Label = c("scaffold_1254", "scaffold_15158",
"scaffold_7180", "scaffold_74038", "scaffold_7638", "scaffold_8315"
), class = "factor"), gene = structure(c(7L, 5L, 4L, 2L, 6L,
3L, 1L), .Label = c("G1", "G2", "G3", "G4", "G5", "G6", "G7"), class = "factor"),
start_gene = c(6708L, 9567L, 3456L, 10105L, 2760L, 9814L,
1476L), end_gene = c(11967L, 10665L, 4479L, 10609L, 3849L,
10132L, 2010L), start_scaff = c(1L, 1L, 1L, 1L, 1L, 1L, 1L
), end_scaff = c(20072L, 15336L, 15336L, 13487L, 10827L,
10155L, 2010L), strand = structure(c(1L, 1L, 2L, 1L, 2L,
1L, 2L), .Label = c("backward", "forward"), class = "factor"),
direction = c(-1L, -1L, 1L, -1L, 1L, -1L, 1L), COL1 = c(10L,
18L, 18L, 5L, 25L, 21L, 8L), COL2 = c(20L, 1L, 1L, 9L, 7L,
9L, 34L)), class = "data.frame", row.names = c(NA, -7L))
近似值是
ggplot(tab, aes(x = start_scaff, xend = end_scaff,
y = molecule, yend = molecule)) +
geom_segment(size = 3, col = "grey80") +
geom_segment(aes(x = ifelse(direction == 1, start_gene, end_gene),
xend = ifelse(direction == 1, end_gene, start_gene)),
data = tab,
arrow = arrow(length = unit(0.1, "inches")), size = 2) +
geom_text_repel(aes(x = start_gene, y = molecule, label = gene),
data = tab, nudge_y = 0.5,size=2) +
scale_y_discrete(limits = rev(levels(tab$molecule))) +
theme_minimal() +
geom_text(data = mutate(tab, COLr1 = COL1<10), aes(color = COLr1, label = COL1), position = position_nudge(x=20000)) +
geom_text(data = mutate(tab, COLr2 = COL2<10), aes(color = COLr2, label = COL2), position = position_nudge(x=22000)) +
geom_text(data = mutate(tab, txt = "-"), aes(label = txt), position = position_nudge(x=21100)) +
scale_color_manual(values = c("darkgreen", "red")) +
xlim(c(NA,23000)) +
theme(legend.position = "none")
您好,我有一个 df,例如:
tab
X molecule gene start_gene end_gene start_scaff end_scaff strand direction COL1 COL2
1 7 scaffold_1254 G7 6708 11967 1 20072 backward -1 10 20
2 5 scaffold_7638 G5 9567 10665 1 15336 backward -1 18 1
3 4 scaffold_7638 G4 3456 4479 1 15336 forward 1 18 1
4 2 scaffold_15158 G2 10105 10609 1 13487 backward -1 5 9
5 6 scaffold_8315 G6 2760 3849 1 10827 forward 1 25 7
6 3 scaffold_7180 G3 9814 10132 1 10155 backward -1 21 9
7 1 scaffold_74038 G1 1476 2010 1 2010 forward 1 8 34
到目前为止,这段代码:
ggplot(tab, aes(x = start_scaff, xend = end_scaff,
y = molecule, yend = molecule)) +
geom_segment(size = 3, col = "grey80") +
geom_segment(aes(x = ifelse(direction == 1, start_gene, end_gene),
xend = ifelse(direction == 1, end_gene, start_gene)),
data = tab,
arrow = arrow(length = unit(0.1, "inches")), size = 2) +
geom_text_repel(aes(x = start_gene, y = molecule, label = gene),
data = tab, nudge_y = 0.5,size=2) +
scale_y_discrete(limits = rev(levels(tab$molecule))) +
theme_minimal()
我设法得到了这个情节:
我想知道是否有一种方法可以在 geom_segment 旁边添加带有 COL1
和 COL2
值的文本,并根据阈值为文本着色:绿色值 > 10、红色值 <= 10
得到类似
的东西dput(tab)
structure(list(X = c(7L, 5L, 4L, 2L, 6L, 3L, 1L), molecule = structure(c(1L,
5L, 5L, 2L, 6L, 3L, 4L), .Label = c("scaffold_1254", "scaffold_15158",
"scaffold_7180", "scaffold_74038", "scaffold_7638", "scaffold_8315"
), class = "factor"), gene = structure(c(7L, 5L, 4L, 2L, 6L,
3L, 1L), .Label = c("G1", "G2", "G3", "G4", "G5", "G6", "G7"), class = "factor"),
start_gene = c(6708L, 9567L, 3456L, 10105L, 2760L, 9814L,
1476L), end_gene = c(11967L, 10665L, 4479L, 10609L, 3849L,
10132L, 2010L), start_scaff = c(1L, 1L, 1L, 1L, 1L, 1L, 1L
), end_scaff = c(20072L, 15336L, 15336L, 13487L, 10827L,
10155L, 2010L), strand = structure(c(1L, 1L, 2L, 1L, 2L,
1L, 2L), .Label = c("backward", "forward"), class = "factor"),
direction = c(-1L, -1L, 1L, -1L, 1L, -1L, 1L), COL1 = c(10L,
18L, 18L, 5L, 25L, 21L, 8L), COL2 = c(20L, 1L, 1L, 9L, 7L,
9L, 34L)), class = "data.frame", row.names = c(NA, -7L))
近似值是
ggplot(tab, aes(x = start_scaff, xend = end_scaff,
y = molecule, yend = molecule)) +
geom_segment(size = 3, col = "grey80") +
geom_segment(aes(x = ifelse(direction == 1, start_gene, end_gene),
xend = ifelse(direction == 1, end_gene, start_gene)),
data = tab,
arrow = arrow(length = unit(0.1, "inches")), size = 2) +
geom_text_repel(aes(x = start_gene, y = molecule, label = gene),
data = tab, nudge_y = 0.5,size=2) +
scale_y_discrete(limits = rev(levels(tab$molecule))) +
theme_minimal() +
geom_text(data = mutate(tab, COLr1 = COL1<10), aes(color = COLr1, label = COL1), position = position_nudge(x=20000)) +
geom_text(data = mutate(tab, COLr2 = COL2<10), aes(color = COLr2, label = COL2), position = position_nudge(x=22000)) +
geom_text(data = mutate(tab, txt = "-"), aes(label = txt), position = position_nudge(x=21100)) +
scale_color_manual(values = c("darkgreen", "red")) +
xlim(c(NA,23000)) +
theme(legend.position = "none")