簡體   English   中英

有關使用ggplot2制作熱圖的基本問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM