2017-05-05 125 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