2017-05-05 89 views
1

我想绘制一个geom_histogram,其中的酒吧被渐变色。通过渐变着色geom_histogram

这就是我想要做的事:

library(ggplot2) 
set.seed(1) 
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F) 
ggplot(df,aes_string(x="val",y="..count..+1",fill="val"))+geom_histogram(binwidth=1,pad=TRUE)+scale_y_log10()+scale_fill_gradient2("val",low="darkblue",high="darkred") 

但要: enter image description here

不知道如何得到它的定义渐变颜色的?

回答

7

不确定您可以填写val,因为直方图的每个条代表点的集合。

可以,但是,通过使用cut分类垃圾箱填写。例如:

ggplot(df, aes(val, fill = cut(val, 100))) + 
    geom_histogram(show.legend = FALSE) 

histogram

+0

只是为了完整性,您可以使用'factor(val)'而不是'cut',但这实际上几乎将每个点转换为唯一的因子级别,具有独特的颜色,并且需要大量时间来处理。相反,要更改渐变的粒度,最好调整裁剪的数量(在此答案中设置为100) –

1

只是为了保持完整性。

如果颜色我想对在这里可以手动选择梯度是我的建议:

数据:

library(ggplot2) 
set.seed(1) 
df <- data.frame(id=paste("ID",1:1000,sep="."),val=rnorm(1000),stringsAsFactors=F) 

颜色:

bins <- 10 
cols <- c("darkblue","darkred") 
colGradient <- colorRampPalette(cols) 
cut.cols <- colGradient(bins) 
cuts <- cut(df$val,bins) 
names(cuts) <- sapply(cuts,function(t) cut.cols[which(as.character(t) == levels(cuts))]) 

情节:

ggplot(df,aes(val,fill=cut(val,bins)))+geom_histogram(show.legend=FALSE)+scale_color_manual(values=cut.cols,labels=levels(cuts))+scale_fill_manual(values=cut.cols,labels=levels(cuts)) 

enter image description here