为什么热图行顺序与数据行顺序不同?
Why heatmap row order is not the same as the data row order?
你好,我创建了一个 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))
如您所见,标签有特定顺序:
1 - SP4
2 - SP5
3 - SP7
...
7 - SP8
8 - SP1
这是 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>
所以如果我使用 ggplot 绘制热图,我希望看到相同的 row order
,但我得到的是这个命令:
我使用了代码:
ggplot(mod_mat_gen_env, aes(x=Categories, y=label))+
geom_tile(aes(fill=Value))
一种选择是在 data.frame 中重构它,或者您可以使用 scale_y_discrete()
中的 limits=
选项提供顺序
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))
你好,我创建了一个 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))
如您所见,标签有特定顺序:
1 - SP4
2 - SP5
3 - SP7
...
7 - SP8
8 - SP1
这是 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>
所以如果我使用 ggplot 绘制热图,我希望看到相同的 row order
,但我得到的是这个命令:
我使用了代码:
ggplot(mod_mat_gen_env, aes(x=Categories, y=label))+
geom_tile(aes(fill=Value))
一种选择是在 data.frame 中重构它,或者您可以使用 scale_y_discrete()
limits=
选项提供顺序
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))