解决ggplot排序/组合变量名称而不强制执行固定顺序

时间:2014-03-25 10:55:33

标签: r ggplot2

这与this question about ggplot changing the order of variable names有关。那里给出的答案是手动强制执行因子水平的双向重新排序,但一般来说并不能解决问题。一个例子是melt(matcor(data.A,data.B)$XYcor)的输出,它重复两次行:

data.A <- as.data.frame(matrix(runif(c(25)),nrow=5,ncol=5))
data.B <- as.data.frame(matrix(runif(c(25)),nrow=5,ncol=5))

library(ggplot)
library(CCA)
qplot(x=Var1, y=Var2, data=melt(matcor(data.A,data.B)$XYcor), fill=value, geom="tile")

这个图背后的想法是显示两个多变量集之间的互相关,如img.matcor所做的那样:

img.matcor(matcor(data.A,data.B))

XYcor plot

在此图中,左上和右下象限是data.Adata.B的自相关矩阵,而其他象限是互相关矩阵的翻转版本。将数据重新排序为ggplot2会破坏这种关系。 (另一方面,ggplot使这看起来更像方式。)

不幸的是,使用melt拨打factor.levels=FALSE并不能解决此问题,首先,melt会正确地对列进行排序。有解决方法吗?

1 个答案:

答案 0 :(得分:1)

我认为至少对于示例数据,您使用qplot()得出错误的情节,因为您在data.Adata.B中拥有相同的列名,然后在qplot()中获得了相同的列名称只是部分实际相关性。如果您更改其中一个数据框的列名,则qplot()看起来更像img.matcor()。现在只有自相关矩阵是左上角和右上角。

set.seed(1)
data.A <- as.data.frame(matrix(runif(c(25)),nrow=5,ncol=5))
names(data.A)<-c("A1","A2","A3","A4","A5")
data.B <- as.data.frame(matrix(runif(c(25)),nrow=5,ncol=5))
qplot(x=Var1, y=Var2, data=melt(matcor(data.A,data.B)$XYcor), 
              fill=value, geom="tile")

enter image description here