如何使用GGR中的ggplot基于列对热图进行聚类?

如何使用GGR中的ggplot基于列对热图进行聚类?,r,ggplot2,R,Ggplot2,以前有人问过很多关于聚集热图的问题。然而,我似乎无法根据我的具体问题调整任何其他答案。另外,许多其他答案依赖于使用其他包来创建热图图(而我想坚持使用ggplot) 但基本上,我正在尝试根据列重新排列在ggplot中创建的热图。希望下面的例子能解释我的意思 如果我创建一些数据并绘制一张热图,如下所示: library(colorspace) library(ggplot2) #create data df <- data.frame( a = paste0("a",

以前有人问过很多关于聚集热图的问题。然而,我似乎无法根据我的具体问题调整任何其他答案。另外,许多其他答案依赖于使用其他包来创建热图图(而我想坚持使用
ggplot

但基本上,我正在尝试根据列重新排列在
ggplot
中创建的热图。希望下面的例子能解释我的意思

如果我创建一些数据并绘制一张热图,如下所示:

library(colorspace)
library(ggplot2)

#create data
df <- data.frame(
  a = paste0("a", c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5)),
  b = paste0("b", c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5))
  )

# create data to fill heatmap
c = c(-10, -9, -8, -2, -9,
      2, 5, 2, 0, 5,
      -5,-6,-7,-8,-9,
      2, 5, 2, 0, 5,
      -5,-6,-7,-8,-9
)

# From discrete to continuous
df$a <- match(df$a, sort(unique(df$a)))
df$b <- match(df$b, sort(unique(df$b)))

# set colour palette
pallette <- rev(sequential_hcl(palette = "Plasma", n = 100)) 

# plot
ggplot(df, aes(a, b)) +
  geom_tile(aes(fill = c)) +
  scale_fill_gradientn(
    limits = range(c),
    colors = pallette,
    guide = guide_colorbar(
      frame.colour = "black",
      ticks.colour = "black"
    )
  )
库(颜色空间)
图书馆(GG2)
#创建数据

df您可以通过减少
c
来重新排列x轴。您不一定要将
c
作为列包含在数据集中,但我仍然建议您在
df
中包含
a
b
c

df$c <- c  # not strictly required

ggplot(df, aes(reorder(a, -c), b)) +
  geom_tile(aes(fill = c)) +
  scale_fill_gradientn(
    limits = range(c),
    colors = pallette,
    guide = guide_colorbar(
      frame.colour = "black",
      ticks.colour = "black"
    )
  )

df$c我现在正在研究这个函数。请原谅我的无知,但我如何将其应用于上述问题?只是一点迂腐;您可能不应该将变量称为
c
t
F
,因为它们在R中有特殊意义。