[英]Basic questions about using ggplot2 to make heatmaps
我正在嘗試學習如何在R中生成熱圖,如果這些問題看起來真的很基礎,那么請抱歉。 假設我有這張桌子(有些人為設計,但我只是在這里嘗試練習):
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軸上,該對的平均小時數是顏色的強度。 例如,由於有兩個“ Cat Pizza”(Cat Pizza)值(2、3),因此將繪制對應於2.5的顏色,這將比Dog Apple(其值為6)的值更淺。
到目前為止,我具有以下內容,它們可以創建正確的結構,但不包含平均值(不確定將其放置在何處……可能類似於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
非常感謝您的幫助! 我想學習如何正確地做到這一點:)
嘗試像下面這樣的基本熱圖:
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不能從一個因數中得出梯度,因此它是錯誤的。
祝好運!
首先,您可以在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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.