我在使用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)
这个数字是:
问题是:
图中的条形颜色与df$col
不匹配。例如,条形图a和b的颜色为#EBCCD6而不是#E09898。
因为我手动指定x轴最后刻度文本为&#34;&gt; 10&#34;在该刻度右侧的绘图中创建了一个额外的空格,使得我在10处截断的条形似乎它们以10结束,而我的目的是让它们一直到达绘图的右端。
答案 0 :(得分:2)
我无法重现您生成的图表。运行您提供的代码会生成以下图表:
您可以通过命名传递给scale_fill_manual
的矢量
coloursv <- df$col
names(coloursv) <- df$col
在问题的第二部分 - 您可以使用expand
的{{1}}参数确保条形图与图表边缘之间没有空格。
进行这两项更改后,绘图的代码变为:
scale_y_continuous
&#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()