R-ggplot和corrplot产生非常不同的图(相关图/矩阵)

时间:2016-08-05 21:01:49

标签: r ggplot2 tidyr r-corrplot

我有数据范围,一个数据透视表(data_wide2),我使用tidyr的spread()生成一列,然后保留所有其余部分(data_wide用于另一个脚本)。

然后我根据另一个变量('开始')使用我的数据级别,这导致索引不整洁(83,35,86等)

我使用以下代码生成一个带有corrplot的相关矩阵(除了标签之外,它已成功并适合于图形)。第一个图显示了两个明显较暗的正方形。

heatmap <- function(){
    data_wide2 <- data_wide
    data_wide2$Protein <- reorder(data_wide2$Protein,data_wide2$Start)
    data_wide2 <- data_wide2[order(data_wide2$Start),]
    pre_matrix <- data_wide2[,8:ncol(data_wide2)]
    exp_data <- as.matrix(pre_matrix)

    square <- cor(t(exp_data))
    square <- (corrplot(square, method = "circle"))
    square
    return(corrplot(square, method = "circle")) #plot matrix
    }
    heatmap()

enter image description here

由于我的最终数字必须是plot_grid的一部分,因此它必须是ggplot对象。因此,我搜索了相关图/矩阵的教程。当我将一个应用于我的数据集时,生成的绘图与我之前的绘图无关。我的直觉是数据被重新调整回算术顺序,但我不知道如何修复它。

 heatmap <- function(){
    data_wide2 <- data_wide
    data_wide2$Protein <- reorder(data_wide2$Protein,data_wide2$Start)
    data_wide2 <- data_wide2[order(data_wide2$Start),]
    pre_matrix <- data_wide2[,8:ncol(data_wide2)]
    exp_data <- as.matrix(pre_matrix)

    square <- melt(cor(t(exp_data)))

    plot <- ggplot(square,aes(Var1,Var2,fill=value)) + 
        geom_tile() +
        scale_fill_gradient2(limits=c(-1,1),midpoint=0,low='000000',high='steelblue',space='Lab') +
        #scale_x_reverse(lim=c(97,0))
        scale_y_reverse(lim=c(97,0)) +
        theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))

        coord_flip()
    plot
    print(class(plot))
    return(plot)
    }
heatmap()

enter image description here

我尝试将Var1转换为一个因子,转换为一个角色,但都不起作用。

Error in eval(expr, envir, enclos) : object 'x' not found
In addition: Warning messages:
1: In min(x, na.rm = na.rm) :
  no non-missing arguments to min; returning Inf
2: In max(x, na.rm = na.rm) :
  no non-missing arguments to max; returning -Inf
3: In min(diff(sort(x))) : no non-missing arguments to min; returning Inf

1 个答案:

答案 0 :(得分:0)

我通过添加这些函数解决了(我替换了(1:97)的原始索引):

idx <- as.vector(square$Var1[1:97])
    square$Var1 <- sapply(square$Var1,function(x){return(which(idx == x))})
    square$Var2 <- sapply(square$Var2,function(x){return(which(idx == x))})

但现在我丢失了行的原始索引(尽管如此,它仍然无关紧要)。

我会打开这个问题,以便有人能提供更好,更整洁的解决方案。