在 R 中绘制单个颜色块

Plot single block of color in R

我想弄清楚如何在 R 中绘制单个颜色块。我想用颜色可视化基因组的一个区域。我从一个有 1 行和 6049 列的矩阵开始。

l1_canon <- matrix( nrow = 1, ncol = 6049, data = "_" )

接下来,我有区分该元素主要区域的块:

l1_canon[,1:909] <- "5' UTR"
l1_canon[,910:1923] <- "ORF1"
l1_canon[,1990:5814] <- "ORF2"
l1_canon[,49:420] <- "CPG"
l1_canon[,5815:6049] <- "3' UTR"
l1_canon[,211:225] <- "RXRA::VDR"

我已经为不同的类别分配了颜色:

l1_colors <- list()
l1_colors[["5' UTR"]] <- "#26A064" # "#ea0064"
l1_colors[["ORF1"]] <- "#3095C7" # "#008a3f"
l1_colors[["ORF2"]] <- "#CA6BAA" # "#116eff"
l1_colors[["CPG"]] <- "#B38241" # "#cf00dc"
l1_colors[["3' UTR"]] <- "#CCCCCC" # "#dddddd"
l1_colors[["RXRA::VDR"]] <- "#FFFFFF"
l1_colors[["_"]] <- "#000000"

但我不知道如何绘制它。我在 R 中寻找类似 color ramp functions 的东西,并且一直在尝试调整代码但未成功。

我试过像这样分配颜色

for ( i in l1_canon ){
  l1_color <- l1_colors[ l1_canon ]
}

并在用于生成色带图的代码中使用它,但出现错误。我知道拥有 6000 多列会使视觉上看起来很奇怪,但这正是我所需要的!我希望我可以使各个色块足够小以适合屏幕。最终,此栏将在另一张图片上方进行注释。

TY 你的帮助! :)

我不太明白你想要什么,但你可以使用 ggplot2 如下:

# Find the run lengths of the regions
rle1 = rle(l1_canon[1,])

# Turn the run lengths into a data frame
df=data.frame(lengths=rle1$lengths, V=rle1$values)

# Align the colours with the regions
df$color <- unlist(l1_colors)[df$V]

# Plot a single stacked bar on its side with no annotation
ggplot(df, aes(x=1,group=seq_along(V),label=V, fill=color,y=lengths)) + 
  geom_bar(stat="identity",color="black")+
  scale_fill_identity() + 
  theme_void() + 
  coord_flip()+ 
  scale_y_reverse()