在 ggplot2 图中绘制字母字符串

问题描述 投票:0回答:1

我有以下数据框:

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)

这是我想要实现的目标(通过文本编辑器):

r string ggplot2 dna-sequence
1个回答
5
投票
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()
  )

© www.soinside.com 2019 - 2024. All rights reserved.