R 为什么热图行顺序与数据行顺序不同?

R 为什么热图行顺序与数据行顺序不同?,r,ggplot2,heatmap,R,Ggplot2,Heatmap,您好,我的工作我创建了一个ggplot2热图 这是数据 structure(list(label = structure(c(4L, 5L, 7L, 2L, 3L, 6L, 8L, 1L, 4L, 5L, 7L, 2L, 3L, 6L, 8L, 1L, 4L, 5L, 7L, 2L, 3L, 6L, 8L, 1L), .Label = c("SP1", "SP2", "SP3", "SP4", "SP5", "SP6", "SP7", "SP8"), class = "factor"),

您好,我的工作我创建了一个ggplot2热图

这是数据

structure(list(label = structure(c(4L, 5L, 7L, 2L, 3L, 6L, 8L, 
1L, 4L, 5L, 7L, 2L, 3L, 6L, 8L, 1L, 4L, 5L, 7L, 2L, 3L, 6L, 8L, 
1L), .Label = c("SP1", "SP2", "SP3", "SP4", "SP5", "SP6", "SP7", 
"SP8"), class = "factor"), Categories = structure(c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L), .Label = c("VAR1", "VAR2", "VAR3"), class = "factor"), 
    Value = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 3L, 
    3L, 3L, 3L, 2L, 1L, 1L, 2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L), .Label = c("<NA>", 
    "A", "B"), class = "factor")), class = "data.frame", row.names = c(NA, 
-24L))
以下是df:

> table
   label Categories Value
1    SP4       VAR1  <NA>
2    SP5       VAR1  <NA>
3    SP7       VAR1  <NA>
4    SP2       VAR1  <NA>
5    SP3       VAR1  <NA>
6    SP6       VAR1  <NA>
7    SP8       VAR1  <NA>
8    SP1       VAR1  <NA>
9    SP4       VAR2     A
10   SP5       VAR2     B
11   SP7       VAR2     B
12   SP2       VAR2     B
13   SP3       VAR2     B
14   SP6       VAR2     A
15   SP8       VAR2  <NA>
16   SP1       VAR2  <NA>
17   SP4       VAR3     A
18   SP5       VAR3     B
19   SP7       VAR3     B
20   SP2       VAR3     B
21   SP3       VAR3     B
22   SP6       VAR3     B
23   SP8       VAR3  <NA>
24   SP1       VAR3  <NA>

一个选项是在data.frame中重构它,或者您可以使用
scale\u y\u discrete()中的
limits=
选项提供顺序

df$Value=replace(as.character(df$Value),df$Value==“”,NA)
列表顺序为c(“SP4”、“SP5”、“SP7”、“SP2”、“SP3”、“SP6”、“SP8”、“SP1”)
ggplot(df,aes(x=类别,y=标签))+
geom_瓷砖(aes(填充=值))+
刻度离散(限值=修订(列表正确顺序))

如果我使用您的数据和绘图代码,我会得到从SP8(顶部)到SP1(底部)的y轴顺序。无论如何,它取决于
标签
列的因子级别顺序。第一个因子级别将在底部绘制,最后一个在顶部绘制。假设我有一个按我需要的正确顺序排列的列表:
list\u correct\u order=c(“SP4”、“SP5”、“SP7”、“SP2”、“SP3”、“SP6”、“SP8”、“SP1”)
如何更改标签frm的因子级别?可能
因子(x,级别=唯一(x))
会起作用,其中,
x
是已排序的字符向量。否则,您可能必须首先调用
as.character(x)
。所以在您的代码中:
mod\u mat\u gen\u env$标签
> table
   label Categories Value
1    SP4       VAR1  <NA>
2    SP5       VAR1  <NA>
3    SP7       VAR1  <NA>
4    SP2       VAR1  <NA>
5    SP3       VAR1  <NA>
6    SP6       VAR1  <NA>
7    SP8       VAR1  <NA>
8    SP1       VAR1  <NA>
9    SP4       VAR2     A
10   SP5       VAR2     B
11   SP7       VAR2     B
12   SP2       VAR2     B
13   SP3       VAR2     B
14   SP6       VAR2     A
15   SP8       VAR2  <NA>
16   SP1       VAR2  <NA>
17   SP4       VAR3     A
18   SP5       VAR3     B
19   SP7       VAR3     B
20   SP2       VAR3     B
21   SP3       VAR3     B
22   SP6       VAR3     B
23   SP8       VAR3  <NA>
24   SP1       VAR3  <NA>
ggplot(mod_mat_gen_env, aes(x=Categories, y=label))+
  geom_tile(aes(fill=Value)) 
df$Value = replace(as.character(df$Value),df$Value=="<NA>",NA)
list_correct_order=c("SP4","SP5","SP7","SP2","SP3","SP6","SP8","SP1")

ggplot(df, aes(x=Categories, y=label))+
  geom_tile(aes(fill=Value)) +
scale_y_discrete(limits=rev(list_correct_order))