如何根据列的值订购ggplot热图?

时间:2019-05-20 15:50:29

标签: r ggplot2 heatmap

以下R代码段

library(ggplot2)
library(reshape2)

data <- data.frame(
          item  = c('foo', 'bar', 'baz'),
          val_1 = c(   7 ,    9 ,    3 ),
          val_2 = c(   1 ,    2 ,    3 )
        );

data

data$tot = data$val_1 + data$val_2;

data.molten = melt(data);

ggplot(
   data = data.molten,
   aes(x = variable, y = item ))  +
   geom_tile(aes(fill  = value))  +
   geom_text(aes(label = value))

产生

enter image description here

是否有可能使tot的值降序排列,以使带有bar的行在顶部,而baz的行在底部。

1 个答案:

答案 0 :(得分:5)

添加此行:

data$item <- reorder(data$item,data$tot)

melt之前。

关于此主题的规范StackOverflow问题是here,答案基本上始终是“按所需顺序设置因子水平”,但是在实践中,如何做可能会因情况而异稍微超出了单个StackOverflow答案的范围。