R 在保持数据帧顺序的情况下,按列显示条形图颜色

R 在保持数据帧顺序的情况下,按列显示条形图颜色,r,ggplot2,R,Ggplot2,我试图在R中创建一个条形图,它将保持数据的顺序,并将数据以不同的颜色着色。 我的数据如下所示: row.name BMP2 type qaz 4 gf zaq 3 gf xsw 5 ds 数据按“类型”列排序 下面是我得到的情节。我已经指出了我希望着色的部分: 我的代码: barplot(height = h$BMP2, las=3,

我试图在R中创建一个条形图,它将保持数据的顺序,并将数据以不同的颜色着色。 我的数据如下所示:

row.name  BMP2      type
qaz        4         gf
zaq        3         gf
xsw        5         ds
数据按“类型”列排序

下面是我得到的情节。我已经指出了我希望着色的部分:

我的代码:

 barplot(height = h$BMP2,
          las=3,                                  
          space=1,                                
          main = chosen_gene                         
  )
*使用ggplot2的解决方案将受到欢迎

您可以定义一个向量mycols,该向量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
)

这里的颜色取决于myid,myid只是h的行号,但您可以根据自己的喜好定义其他条件。

问题似乎是条数太多。使用base R条形图,条形图的边框为黑色,使颜色不可见。对于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
对于ggplot图,首先对类别因子的列类型重新排序,以便按组绘制条形图

library(ggplot2)

h$row.name <- factor(as.character(h$row.name), levels = h$row.name, labels = h$row.name)

ggplot(h, aes(x = row.name, y = BMP2, fill = type)) +
  geom_bar(stat = "identity", position = "dodge")

没有列BMP2。你是说GLIPR1吗?是的,很抱歉刚刚创建了几个。第一部分没有工作,所有的条形图都保持黑暗。在ggplot2部分中,我不想按行名称重新排列,因为我需要按类型对条进行排序。h$type的返回值是多少?至于ggplot部分,请给我一点时间。h$type中的每个元素都是一个因子,如果这是您想要的mean@sahar好了,看看是不是这样。不幸的是不是。问题是,所有int列都可以,根据类型值,我得到了1或2,但它仍然只出现在黑色中。您的条可能太小了,您可以尝试使用前50行吗?否则,你能分享你的代码吗?我有703行,50行将是相同的颜色,不管它是否有效,我分享了我的代码上面,并实现了你写的代码与700垂直栏,黑色边框栏是模糊的颜色。向条形图函数添加border=NA。请参见上面答案中的编辑
library(ggplot2)

h$row.name <- factor(as.character(h$row.name), levels = h$row.name, labels = h$row.name)

ggplot(h, aes(x = row.name, y = BMP2, fill = type)) +
  geom_bar(stat = "identity", position = "dodge")