我有数据范围,一个数据透视表(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()
由于我的最终数字必须是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()
我尝试将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
答案 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))})
但现在我丢失了行的原始索引(尽管如此,它仍然无关紧要)。
我会打开这个问题,以便有人能提供更好,更整洁的解决方案。