在ggplot的geom_bar中

时间:2016-05-21 04:48:23

标签: r ggplot2 geom-bar

我在使用ggplot2 geom_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)

这个数字是:

enter image description here

问题是:

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

  2. 因为我手动指定x轴最后刻度文本为&#34;&gt; 10&#34;在该刻度右侧的绘图中创建了一个额外的空格,使得我在10处截断的条形似乎它们以10结束,而我的目的是让它们一直到达绘图的右端。

1 个答案:

答案 0 :(得分:2)

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

enter image description here

您可以通过命名传递给scale_fill_manual的矢量

来正确指定颜色
coloursv <- df$col
names(coloursv) <- df$col

在问题的第二部分 - 您可以使用expand的{​​{1}}参数确保条形图与图表边缘之间没有空格。

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

scale_y_continuous

enter image description here

&#39;&gt; 10&#39;标签有点截止。您可以使用以下方法增加绘图边距以使其可见:

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()

enter image description here