保持数据框顺序的同时按列显示R条形图颜色

时间:2018-10-22 15:30:51

标签: r ggplot2

我正在尝试在R中创建一个条形图,该条形图将保持我的数据顺序,并以另一种颜色为数据着色。 我的数据如下:

row.name  BMP2      type
qaz        4         gf
zaq        3         gf
xsw        5         ds

数据按“类型”列排序。

下面是我得到的情节。我已指出要着色的部分:

bar plot image

我的代码:

 barplot(height = h$BMP2,
          las=3,                                  
          space=1,                                
          main = chosen_gene                         
  )

*将感谢使用ggplot2的解决方案

2 个答案:

答案 0 :(得分:1)

问题似乎出在酒吧上。底数为R barplot时,条形的边框为黑色,使颜色不可见。使用ggplot2也会产生类似的效果。

因此,我将首先创建一个更大的数据集。

h <- read.table(text = "
row.name  BMP2    type
qaz        4         gf
zaq        3         gf
xsw        5         ds                  
", header = TRUE)

h <- do.call(rbind, lapply(1:(700/3), function(i) h[sample(nrow(h)), ]))
h <- h[order(h$type), ]
h$row.name <- paste0(h$row.name, seq_along(h$row.name))
h$BMP2 <- sample(20, nrow(h), TRUE)

dim(h)
#[1] 699   3

现在绘制图表。

根据type组的长度定义颜色向量。然后使用该向量为条形分配颜色。

l <- lengths(split(h$type, h$type))
col <- rep(seq_along(l), l)

barplot(height = h$BMP2,
        las = 3,                                  
        space = 1,                                
        main = "chosen_gene",
        col = col,
        border = NA
)

enter image description here

对于ggplot图,首先对列{ type类的{1}},以便按组绘制条形图。

"factor"

enter image description here

答案 1 :(得分:0)

您可以定义向量mycols,该向量将允许您根据需要选择每种条形颜色。根据样本数据,如果您希望前两个条形为蓝色,最后一个条形为红色:

myids <- 1:nrow(h)
mycols <- ifelse(myids<=2, "blue", "red")
barplot(height = h$GLIPR1,
        las=3,                                  
        space=1,                                
        main = chosen_gene,
        col=mycols, 
        border = NA  # remove the black hairline around each box
)

enter image description here 这里的颜色取决于myid,它只是h的行号,但是您可以根据需要定义其他条件。