2015-04-07 61 views
1

我正試圖學習如何在R中生成熱圖,所以很抱歉,如果這些問題看起來真的很基礎。比方說,我有這個表(有點做作,但我只是想在這裏練習):有關使用ggplot2製作熱圖的基本問題

NumHours FavePet FaveFood 
1  3  Cat Burger 
2  2  Cat Pizza 
3  5 Fish Pizza 
4  2  Dog Pizza 
5  4 Fish Apple 
6  3  Dog Burger 
7  3  Cat Pizza 
8  1  Cat Burger 
9  6  Dog Apple 

的dput結構如下:

structure(list(NumHours = c(3L, 2L, 5L,2L, 4L, 3L, 3L, 1L, 6L), 
FavePet = structure(c(2L, 2L, 3L, 1L, 3L, 1L, 2L, 2L, 1L), 
.Label = c("Dog", "Cat", "Fish"), class = "factor"), 
FaveFood = structure(c(3L, 2L, 2L, 2L, 1L, 3L, 2L, 3L, 1L), 
.Label = c("Apple", "Pizza", "Burger"), class = "factor")), 
.Names = c("NumHours", "FavePet", "FaveFood"), row.names = c(NA, 9L), class = "data.frame") 

我想產生熱FaveFood在x軸上的地圖,FavePet在y軸上,這一對的平均小時數是顏色的強度。例如,由於存在兩個「貓比薩」值(2,3),則將繪製對應於2.5的顏色,並且這將比具有值6的Dog Apple的值更輕。

到目前爲止,我有以下內容,它創建了正確的結構,但沒有包含平均值(不確定將它放在哪裏......它可能類似於fun.y = mean,但我沒有將它應用於y或x,所以我不知道如何調用它)。

ggplot(df, aes(x=FaveFood, y=FavePet, fill=as.factor(NumHours))) + geom_tile(aes(color="white")) 

我也喜歡的顏色從黃到紅的範圍,基於價值,所以我說

+ scale_fill_gradient(low="yellow", high="red") 

但是,這導致這個錯誤,這我不知道如何固定。

Error: Discrete value supplied to continuous scale 

您的幫助真的很感激!我想了解如何做到這一點正確:)

回答

1

試着像一個基本的熱圖:

ggplot(df, aes(FaveFood, FavePet)) + 
    geom_tile(aes(fill = NumHours), colour = "black") + 
    scale_fill_gradient(name = "NumHours", low = "yellow", high = "red") + 
    labs(title = "Heatmap FaveFood and FavePet")+ 
    labs(x = "FaveFood", y = "FavePet") 

還有就是你得到的錯誤原因:

Error: Discrete value supplied to continuous scale 

這是因爲您嘗試使用scale_fill_gradient製作漸變。但是,您只是使用fill = as.factor(NumHours)將數字值填入數字中。 R不能從一個因素中產生一個梯度,所以它是錯誤的。

祝你好運!

+0

哦,我明白了。這是有道理的。謝謝你的幫助。 – pomegranate

0

首先,您可以使用dplyr中的mutate函數生成一個名爲AvgHours的新變量,該變量計算FavePet和FaveFood對的平均值。

df <- df %>% group_by(FavePet,FaveFood) %>% mutate(AvgHours = mean(NumHours)) 

然後,您可以使用ggplot的geom_tile繪製所需的熱圖。

ggplot(df, aes(FaveFood,FavePet)) + geom_tile(aes(fill = AvgHours)) + scale_fill_gradient(low = "yellow", high = "red") 
+0

我從來沒有遇到過mutate函數,但有很多次我遇到過類似這樣的事情會使生活變得更容易的實例。謝謝! – pomegranate

+0

不客氣!您可以在這裏找到dplyr備忘單:http://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf – spsaaibi