这与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))
在此图中,左上和右下象限是data.A
和data.B
的自相关矩阵,而其他象限是互相关矩阵的翻转版本。将数据重新排序为ggplot2会破坏这种关系。 (另一方面,ggplot使这看起来更像方式。)
不幸的是,使用melt
拨打factor.levels=FALSE
并不能解决此问题,首先,melt
会正确地对列进行排序。有解决方法吗?
答案 0 :(得分:1)
我认为至少对于示例数据,您使用qplot()
得出错误的情节,因为您在data.A
和data.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")