我有以下数据框:
readname <- c("tic", "tac", "toe")
sequence <- c("TTTTTTTTATTTTTA","TTTTCTTTTTTTTT","GTTTTTTT")
df <- data.frame(readname, sequence)
我想使用 ggplot2 绘制它,因此 y 轴将包含“readname”列,并且存储在“sequence”列中的字符串将水平绘制,一个在另一个下面,全部向右对齐。我还想为每个字母指定颜色(例如 A - 红色、T - 蓝色、C - 绿色、G - 黄色)。
我尝试使用 geom_text() 但我要么生成空图,要么将每个字符串绘制在同一级别(折叠)或绘制在各个级别上,未对齐。这同样适用于 geom_label()。
我的尝试之一:
ggplot2::ggplot(df, aes(x=sequence, y=readname)) + ggplot2::geom_label(label=sequence)
这是我想要实现的目标(通过文本编辑器):
library(tidyr)
library(dplyr)
library(ggplot2)
df |> mutate(letters = lapply(strsplit(sequence, split = ""), rev)) |>
unnest(letters) |>
mutate(pos = row_number(), .by = c(readname, sequence)) |>
ggplot(aes(x = max(pos) - pos, y = readname, color = letters, label = letters)) +
geom_text() +
scale_color_manual(guide = "none", values = c("red3", "green4", "orange", "blue")) +
scale_y_discrete(limits = rev(readname)) +
theme_minimal() +
theme(
panel.grid = element_blank(),
axis.text.x = element_blank(),
axis.title = element_blank()
)