2015-08-23 44 views
0

我想弄清楚如何在R中創建一個函數,當繪圖時我可以用它來設置柵格中單元格的顏色。最終,我會用繪製的柵格創建這些圖的.gif(我已經有了這部分),但是顏色需要保持一致的繪圖。即在一個繪圖中分配給值1的顏色需要與下一個繪圖中分配給值1的顏色相同。爲光柵分配顏色的功能

柵格是(至少現在)以數據框的形式。例如(我只是使用隨機數的例子的緣故,但是這是我的真實數據的格式化)

A<-data.frame(x=1:100,y=1:100,value=runif(100, 0, 10000))

B<-data.frame(x=1:100,y=1:100,value=runif(100, 5, 5300))

C<-data.frame(x=1:100,y=1:100,value=runif(100, 8500, 12000))

現在我想要分配顏色到一些範圍的值,如1-100,101-200等,這樣1-100將被繪製爲白色,然後101-200如藍色等等。理想情況下,一些顏色從冷色調變爲熱色。請注意,A,B和C中的值範圍都不相同。那是我的我需要一個單一的功能,我可以運行每個數據框,將產生相同的顏色相同的值範圍。

現在如果我描繪出這些3個數據幀

library(ggplot2) 

ggplot() + geom_tile(data=A, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

ggplot() + geom_tile(data=B, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

ggplot() + geom_tile(data=C, aes(x=x, y=y, fill=value)) + scale_fill_gradient(low="blue", high="red")

的顏色範圍保持不變,但是值的範圍沒有。我需要一個函數,可以在A,B和C上運行並獲得相同的「每個值的顏色」或「每個值的範圍」

謝謝!

+0

如果必要的場所你可以設置色階的限制,和/或,'scale_fill_gradient(低= 「藍色」,高= 「紅」,LIM = C(0,2e4))' – baptiste

回答

1

我的竅門是組合您的數據集並創建一個包含數據集名稱的新列。然後,您可以根據這些組(常見圖例)創建圖例,但爲每個數據集創建一個圖。

library(ggplot2) 
library(dplyr) 

A<-data.frame(x=1:100,y=1:100,value=runif(100, 0, 10000), name="A") 

B<-data.frame(x=1:100,y=1:100,value=runif(100, 5, 5300), name="B") 

C<-data.frame(x=1:100,y=1:100,value=runif(100, 8500, 12000), name="C") 

dt = rbind(A,B,C) 

# create 10 groups based on value column (based on general quantiles) 
dt = dt %>% mutate(group = ntile(value,10)) 

# see min and max for each group 
dt %>% group_by(group) %>% summarise(min= min(value), 
            max= max(value), 
            N= n()) 

# common legend and one plot for each dataset (name) 
ggplot() + 
    geom_tile(data=dt, aes(x=x,y=y,fill=group)) + 
    scale_fill_gradient(low="blue", high="red") + 
    facet_grid(~name)