在 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()
我想弄清楚如何在 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()