ggplot geom_bar 中的彩色水平条

Color horizontal bars in ggplot's geom_bar

我在使用 ggplot2geom_bar 时遇到了一些问题:

这是我的数据:

set.seed(1)
df <- data.frame(log10.p.value = -10*log10(runif(10,0,1)), y = letters[1:10], col = rep("#E0E0FF",10), stringsAsFactors = F)
#specify color by log10.p.value
df$col[which(df$log10.p.value > 2)] <- "#EBCCD6"
df$col[which(df$log10.p.value > 4)] <- "#E09898"
df$col[which(df$log10.p.value > 6)] <- "#C74747"
df$col[which(df$log10.p.value > 8)] <- "#B20000"
#truncate bars
df$log10.p.value[which(df$log10.p.value > 10)] <- 10

如您所见,每个 log10.p.value 间隔都分配了不同的颜色,因为我不希望条形延伸超过 log10.p.value = 10,所以我将任何此类值设置为 10。

我的ggplot命令是:

p <- ggplot(df, aes(y=log10.p.value,x=y,fill=as.factor(col)))+
  geom_bar(stat="identity",width=0.2)+coord_flip()+scale_y_continuous(limits=c(0,10),labels=c(seq(0,7.5,2.5)," >10"))+
  theme(axis.text=element_text(size=10))+scale_fill_manual(values=df$col,guide=FALSE)

而这个数字是:

问题是:

  1. 图中的条形颜色与 df$col 不匹配。例如,柱 a 和 b 的颜色为 #EBCCD6 而不是 #E09898。

  2. 因为我手动将 x 轴最后一个刻度文本指定为“>10”,所以在该刻度右侧的绘图中创建了一个额外的 space,使我截断了条形图在 10 点他们似乎在 10 点结束,而我的意图是让他们一直走到情节的右端。

我无法重现您生成的图表。 运行 您提供的代码生成了下图:

您可以通过命名要传递给的矢量来正确指定颜色 scale_fill_manual:

coloursv <- df$col
names(coloursv) <- df$col

对于问题的第二部分 - 您可以使用 scale_y_continuousexpand 参数确保条形和图形边缘之间没有 space。 =19=]

进行这两项更改后,绘图代码变为:

p <- ggplot(df, aes(y=log10.p.value,x=y,fill=as.factor(col)))+
    geom_bar(stat="identity",width=0.2) +
    scale_y_continuous(limits=c(0,10),
                       labels=c(seq(0,7.5,2.5)," >10"),
                       expand = c(0,0)) +
    theme(axis.text=element_text(size=10)) +
    scale_fill_manual(values = coloursv,guide = F) +
    coord_flip()

'>10' 标签有点截断。您可以增加图边距以使其可见,使用:

p + theme(plot.margin=unit(c(0.1,0.5,0.1,0.1),"cm"))