【问题标题】:Solving ggplot sorting/combining of variable names without enforcing fixed order在不强制执行固定顺序的情况下解决 ggplot 对变量名的排序/组合
【发布时间】:2014-03-25 10:55:33
【问题描述】:

这与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.Adata.B的自相关矩阵,而其他象限是互相关矩阵的翻转版本。将数据重新排序为 ggplot2 确实会破坏这种关系。 (另一方面,ggplot 使这看起来方式更好。)

不幸的是,用factor.levels=FALSE 调用melt 并不能解决这个问题,首先,melt 正确地对列进行排序。有解决办法吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案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")
    

    【讨论】:

    • 很高兴知道。不幸的是,它破坏了 data.table 之类的便捷语法,例如 matcor(mydata[Class==0,mycols,with=FALSE], mydata[Class!=0,mycols,with=FALSE])
    • 我明白你的意思,但我不确定你是否可以使用相同的列名,因为你得到用于 x 和 y 轴的相同离散名称,并且这些数据覆盖在图上在同一个位置。
    猜你喜欢
    • 2022-11-21
    • 2020-11-12
    • 2018-05-20
    • 1970-01-01
    • 2018-11-16
    • 2023-03-28
    • 2019-02-01
    • 2020-11-18
    • 2016-04-28
    相关资源
    最近更新 更多