R - ggplot2 geom_tile 创建与热图不同的图形
R - ggplot2 geom_tile creates way different graph to heatmap
我想为一些数据集绘制热图。
最初,我使用了热图函数,结果令人满意。然而,由于我所有其他图表都是使用 ggplot2 完成的,所以我也尝试使用 ggplot2 来完成。然而,我得到了奇怪的图表,我不确定是什么原因。
我得到如下数据集:
> dput(B)
structure(list(`2001` = c(510, 15, 14, 9, 8, 11, 7, 5, -1, -3),
`2002` = c(397, -13, 5, 6, 12, -1, 0, 2, 5, 3),
`2003` = c(323, -6, -2, 1, 0, 6, -5, -2, 1, 4),
`2004` = c(133, -2, 2, -4, 0, 5, 8, -2, 0, 1),
`2005` = c(-100, -8, -6, -2, 1, 2, 2, 3, -6, -5),
`2006` = c(-114, -7, 2, -4, -2, 0, 1, 2, 4, -3),
`2007` = c(-130,-13, 0, 4, -3, -2, -1, 1, 2, 4),
`2008` = c(-38, -10, 4, 0, 3, 4, 2, 0, 0, 1),
`2009` = c(-194, -13, -5, -4, -3, -1, 0, 1, 1, 1),
`2010` = c(-202, -6, 0, -1, -5, -2, -3, -1, 2, -2)),
row.names = 0:9, class = "data.frame")
正在使用,
> heatmap(as.matrix(B), Colv = NA, Rowv = NA, col = cm.colors(10))
我得到了下面的热图,看起来很合理。
另一方面,
C <- B
C$size <- row.names(C)
C <- melt(C, variable.name="year",id=c("size"))
ggplot(data = C) +
geom_tile(aes(x = year, y = size, fill = value)) +
scale_fill_gradientn(colors=cm.colors(10))
我得到以下内容
这是为什么?我怎样才能更正这个,使我得到一个类似于第一个的情节?
问题是 size = 0
的数量比其他条目大得多。所以第二个热图是正确的,因为相对于给定的比例,其余值非常接近于零。我会说第二个实际上是正确的,因为您可以看到 size = 0
之外的数字大致相同,尤其是第一行中的大数字。我不太确定热图是如何工作的,它不提供比例,但我认为第二张图有意义,给出了第一行之外的低可变性。
在热图中应用了缩放。因此,您需要缩放数据(在本例中根据 size
)以重现类似的内容,例如:
C2 <- C %>% group_by(size) %>% mutate(rescale = scale(value))
ggplot(data = C2) +
geom_tile(aes(x = year, y = size, fill = rescale)) +
scale_fill_gradientn(colors=cm.colors(10))
还有其他选项,具体取决于您想要可视化的内容。例如,查看 scale_fill_gradientn
中的 limits
和 values
。
我想为一些数据集绘制热图。 最初,我使用了热图函数,结果令人满意。然而,由于我所有其他图表都是使用 ggplot2 完成的,所以我也尝试使用 ggplot2 来完成。然而,我得到了奇怪的图表,我不确定是什么原因。
我得到如下数据集:
> dput(B)
structure(list(`2001` = c(510, 15, 14, 9, 8, 11, 7, 5, -1, -3),
`2002` = c(397, -13, 5, 6, 12, -1, 0, 2, 5, 3),
`2003` = c(323, -6, -2, 1, 0, 6, -5, -2, 1, 4),
`2004` = c(133, -2, 2, -4, 0, 5, 8, -2, 0, 1),
`2005` = c(-100, -8, -6, -2, 1, 2, 2, 3, -6, -5),
`2006` = c(-114, -7, 2, -4, -2, 0, 1, 2, 4, -3),
`2007` = c(-130,-13, 0, 4, -3, -2, -1, 1, 2, 4),
`2008` = c(-38, -10, 4, 0, 3, 4, 2, 0, 0, 1),
`2009` = c(-194, -13, -5, -4, -3, -1, 0, 1, 1, 1),
`2010` = c(-202, -6, 0, -1, -5, -2, -3, -1, 2, -2)),
row.names = 0:9, class = "data.frame")
正在使用,
> heatmap(as.matrix(B), Colv = NA, Rowv = NA, col = cm.colors(10))
我得到了下面的热图,看起来很合理。
另一方面,
C <- B
C$size <- row.names(C)
C <- melt(C, variable.name="year",id=c("size"))
ggplot(data = C) +
geom_tile(aes(x = year, y = size, fill = value)) +
scale_fill_gradientn(colors=cm.colors(10))
我得到以下内容
这是为什么?我怎样才能更正这个,使我得到一个类似于第一个的情节?
问题是 size = 0
的数量比其他条目大得多。所以第二个热图是正确的,因为相对于给定的比例,其余值非常接近于零。我会说第二个实际上是正确的,因为您可以看到 size = 0
之外的数字大致相同,尤其是第一行中的大数字。我不太确定热图是如何工作的,它不提供比例,但我认为第二张图有意义,给出了第一行之外的低可变性。
在热图中应用了缩放。因此,您需要缩放数据(在本例中根据 size
)以重现类似的内容,例如:
C2 <- C %>% group_by(size) %>% mutate(rescale = scale(value))
ggplot(data = C2) +
geom_tile(aes(x = year, y = size, fill = rescale)) +
scale_fill_gradientn(colors=cm.colors(10))
还有其他选项,具体取决于您想要可视化的内容。例如,查看 scale_fill_gradientn
中的 limits
和 values
。