2016-05-12 49 views
0

我試圖建立類似這裏的一個類型的顏色密度圖:熱顏色密度中的R

https://stats.stackexchange.com/questions/26676/generating-visually-appealing-density-heat-maps-in-r

但是,隨着不同類型的進入它的數據。我的真實數據有一​​堆行,但例如,我將代碼放入X,Y,Score數據框中,並且我想要使用這些靜態X,Y桶來設置顏色密度圖。那可能嗎?

X=seq(0,10,by=1) 
Y=seq(50,60,by=1) 
total=expand.grid(X,Y) 
nrow(total) 
total$score=runif(nrow(total), min=0, max=100) 
range(total$score) 
head(total) 

my_palette <- colorRampPalette(c("blue", "yellow", "red"))(n = 100) 
col_breaks = c(seq(0,100,length=100)) 
col=data.frame(as.character(my_palette),col_breaks) 
col$num=row.names(col) 
head(col) 
col$col_breaks=round(col$col_breaks,0) 
names(col)[1]="hex" 

total$round=round(total$score) 
total$color=as.character(col$hex[match(total$round,col$col_breaks)]) 

plot(total$Var1,total$Var2,col=total$color,xlim=c(0,10),ylim=c(50,60)) 

我不是想hexbin或任何限制成箱,想通了這一點使用條件的rect()的顏色,但這種類型的數據,不知道是否有它進行排序的更多的是一種方式類似這樣的熱自由流動的形狀:

a busy cat

還是需要是連續的數據,做這樣的事情?

回答

1

如果我正確理解你的問題,我認爲你可以在ggplot中做到這一點。

基本上,你可以使用geom_raster填充瓷磚與插值選項,所以它不會看起來「塊」。然後,您可以將漸變設置爲您想要的。舉例來說,根據您給我的樣本數據,我將低,中,高顏色分別設置爲藍色,白色和紅色。這將僅僅是下面的代碼:

library(ggplot2) 

ggplot(total, aes(x=Var1, y=Var2)) + 
    geom_raster(aes(fill=score), interpolate=TRUE) + 
    scale_fill_gradient2(limits=c(0,100), low="blue", mid="white", high="red", midpoint = 50) 

輸出:

enter image description here

+0

這是真棒!謝謝! – BaseballR