ggplot2 geom_tile的订单数据

时间:2016-04-15 15:44:37

标签: r ggplot2

我想在热图中使用以下数据创建热图:

IND1    IND2    FREQ
Alix    Bob     3
Bob     Crit    5
Alix    Alix    7
Fang    Fang    2
Alix    Crit    1
Crit    Dix     9
Dix     Alix    2
Bob     Fang    3
Bob     Bob     1

我还想根据个人的类型订购行和列。所以,我在数据中添加了两列,使其看起来如下:

IND1    IND2    FREQ    IND1.TYPE   IND2.TYPE
Alix    Bob     3       Dog         Cat
Bob     Crit    5       Cat         Dog
Alix    Alix    7       Dog         Dog
Fang    Fang    2       Dog         Dog
Alix    Crit    1       Dog         Dog
Crit    Dix     9       Dog         Cat
Dix     Alix    2       Cat         Dog
Bob     Fang    3       Cat         Dog
Bob     Bob     1       Cat         Cat

基本上,我希望将狗组合在一起,并将Cats沿X轴和Y轴组合在一起。我使用this question中的代码进行排序:

tr$IND1<-factor(tr$IND1, levels=(tr$IND1)[order(tr$IND1.TYPE)])
tr$IND2<-factor(tr$IND2, levels=(tr$IND2)[order(tr$IND2.TYPE)])

热图的代码如下:

ggplot(tr, aes(IND1, IND2)) + geom_tile(aes(fill = FREQ), colour = "white") + scale_fill_gradient(low = "blue", high = "red")

产生以下情节: enter image description here

虽然狗和猫在他们各自的团体中被命令,但我也希望他们在各自的团体中按字母顺序排列。所以,我希望行和列看起来像:

Fang
Crit
Alix
Dix
Bob
   Bob  Dix  Alix  Crit Fang

我认为默认情况下,“订单”会根据this question上接受的答案按字母顺序在每个组内排序。但是,在这种情况下,这似乎不起作用。

所以,我想知道最有效的排序方法,以获得所需的输出。

1 个答案:

答案 0 :(得分:0)

为了在Dog / Cat组中按字母顺序排列您的因子,您需要根据这两个变量对水平进行排序。

tr$IND1 <- factor(tr$IND1, levels = unique(tr$IND1[order(tr$IND1.TYPE, tr$IND1)]))
tr$IND2 <- factor(tr$IND2, levels = unique(tr$IND2[order(tr$IND2.TYPE, tr$IND2)]))

然后你的绘图轴将具有所需的顺序。

enter image description here