R 关于使用ggplot2制作热图的基本问题
我正在尝试学习如何在R中生成热图,如果这些问题看起来很基本,那么很抱歉。假设我有一张桌子(有点做作,但我只是想在这里练习): dput结构如下所示:R 关于使用ggplot2制作热图的基本问题,r,ggplot2,heatmap,R,Ggplot2,Heatmap,我正在尝试学习如何在R中生成热图,如果这些问题看起来很基本,那么很抱歉。假设我有一张桌子(有点做作,但我只是想在这里练习): 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
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”值(2,3),因此将绘制对应于2.5的颜色,这将比Dog Apple的值(值为6)浅
到目前为止,我有以下内容,它创建了正确的结构,但没有包含平均值(不确定放在哪里…它可能很有趣。y=平均值,但我没有将其应用于y或x,所以我不知道如何称呼它)
我还希望颜色范围从黄色到红色,基于我添加的值
+ 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
这是因为你试图用你的比例填充梯度来做一个梯度。但是,您只是使用fill=as.factor(NumHours)从数值中生成了一个因子。R不能使因子变为梯度,所以如果它出错了
祝你好运 首先,您可以使用
dplyr
中的mutate
函数生成一个名为AvgHours的新变量,该变量计算FavePet和FaveFood对的平均值
df <- df %>% group_by(FavePet,FaveFood) %>% mutate(AvgHours = mean(NumHours))
哦,我明白了。这是有道理的。谢谢你的帮助。我以前从来没有遇到过变异函数,但是有很多次我遇到过这样的例子,它们会让生活变得更简单。谢谢不客气!您可以在此处找到dplyr备忘单:
Error: Discrete value supplied to continuous scale
df <- df %>% group_by(FavePet,FaveFood) %>% mutate(AvgHours = mean(NumHours))
ggplot(df, aes(FaveFood,FavePet)) + geom_tile(aes(fill = AvgHours)) + scale_fill_gradient(low = "yellow", high = "red")