我试图在我的ggplot中添加自定义图例,类似于以下示例:http://docs.ggplot2.org/0.9.2.1/scale_gradientn.html
我希望绘图中的小条根据df$col
列进行着色,因此我使用scale_fill_manual
和values = coloursv
。
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
coloursv <- df$col
names(coloursv) <- df$col
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)) +
theme(axis.text=element_text(size=10)) +
scale_fill_manual(values = coloursv)+coord_flip()+
scale_fill_gradientn(colours=c("#EBCCD6","#E09898","#C74747","#B20000","#E0E0FF"),
breaks=c(-4,-3,-2,-1,0),guide="colorbar",labels=c(2,4,6,8,10))
一无所获:
答案 0 :(得分:2)
您没有获得图例,因为您scale_fill_manual(values = coloursv,guide=F)
和guide=F
会阻止显示填充图例。
另一方面,scale_color_gradientn
设定了色彩美感,但您的情节中没有色彩美感。你可能在这里scale_fill_gradient
(在这种情况下你不想也有scale_fill_manual
)。但是,即使将此语句切换为scale_fill_manual
,也要将中断设置为超出数据值范围的值(中断范围为-4到0,但数据范围为0.4)到10)。
添加df$col
不会设置要绘制的颜色。它只是在log10.p.value
的不同范围内创建一个具有不同类别值的分类变量。您可以将类别值调用为任何内容,并且ggplot2具有默认调色板,无论类别名称如何都是相同的,并且仅取决于类别的数量。如果您想要分类值,可以使用切割函数,如下所示。
以下是一些说明各种填充选项和图例的示例:
# Create log10.p.value categories
df$log10.p.value.cat = cut(df$log10.p.value, seq(0,10,2))
# Fill bars based on log10.p.value.cat
p1=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip()
下面的图表是您的问题中包含图例的图表。请注意,scale_fill_manual
中颜色的排序必须与log10.p.value.cat
中相应值的顺序相匹配,才能获得每个类别的所需颜色。
# Fill bars based on log10.p.value.cat with custom colors
p1a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip() +
scale_fill_manual(values=c("#E0E0FF","#EBCCD6","#E09898","#C74747","#B20000"))
# Continuous fill gradient based on log10.p.value
p2=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip()
# Continuous fill gradient based on log10.p.value with custom colors
p2a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) +
geom_bar(stat="identity", width=0.2) +
scale_y_continuous(limits=c(0,10)) +
theme(axis.text=element_text(size=10)) +
coord_flip() +
scale_fill_gradientn(colours=c("#EBCCD6","#E09898","#C74747","#B20000","#E0E0FF"),
breaks=seq(0,10,2))