2015-09-04 116 views
2

早上好,上标热绘图标签在ggplot [R

我正在在特定表型之间的相关性ggplot热图。我想用R^2来标记每个图块的关联。
我有一个相关矩阵,max_all,它看起来像这样:

phenolist2 pheno1 pheno2 pheno3 pheno4 pheno5 
max.pheno1  pheno1 0.05475998  0.05055959 0.05056578 0.10330301 0.05026997 
max.pheno2 pheno2 0.15743312  0.05036100 0.05151750 0.04880302 0.31008809 
max.pheno3  pheno3 0.05458550  0.07672537 0.04043422 0.16845294 0.14268895 
max.pheno4  pheno4 0.05484327  0.04391523 0.05151107 0.09521869 0.19776296 
max.pheno5   pheno5 0.08658449  0.05183693 0.16292683 0.22369817 0.53630569 

否则,我的代码如下:

tmp_Rsq <- melt(max_all) 

tmp_Rsq <- ddply(tmp_Rsq, .(variable), transform, rescale=rescale(value)) 

labels_Rsq <- expression(paste(R^2, " = ", format(tmp_Rsq$value, digits=2), sep="")) 

ggplot(tmp, aes(variable, phenolist2)) + 
    geom_tile(aes(fill =-log10(value)), colour = "white") + 
    geom_text(aes(label=as.character(labels_Rsq), parse = TRUE, size=4)) + 
    scale_fill_gradientn(colours = myPalette(101), name="-log10(P)", limits=c(0 , 3.5)) + 
    theme(axis.title.x = element_blank(), axis.title.y=element_blank(), 
     plot.title=element_text(size=20))+ 
    theme(axis.text = element_text(colour="black", face="bold")) 

我的问题是,我不能表达写出来所以2是R的上标。 我知道在这个网站上有很多关于类似问题的问题,例如ggplot2 two-line label with expression,Combining paste() and expression() functions in plot labelsAdding Regression Line Equation and R2 on graph,但是我一直无法得到这些答案中提出的解决方案适用于我的案例(可能是因为我一直在尝试使用标签矢量)。

非常感谢您的帮助。

回答

4

解析需要在aes之外,标签需要是一个字符向量。

labels_Rsq <- paste0("R^2 ==", format(tmp_Rsq$value, digits=2)) 

> head(labels_Rsq) 
[1] "R^2 ==0.055" "R^2 ==0.157" "R^2 ==0.055" "R^2 ==0.055" "R^2 ==0.087" "R^2 ==0.051" 

ggplot(tmp_Rsq, aes(variable, phenolist2)) + 
    geom_tile(aes(fill =-log10(value)), colour = "white") + 
    geom_text(aes(label=as.character(labels_Rsq)), parse = TRUE, size=4) + 
# scale_fill_gradientn(colours = myPalette(101), name="-log10(P)", limits=c(0 , 3.5)) + 
    theme(axis.title.x = element_blank(), axis.title.y=element_blank(), 
     plot.title=element_text(size=20))+ 
    theme(axis.text = element_text(colour="black", face="bold")) 

enter image description here