Superscripts in heat plot labels in ggplot r

2020-04-15 06:16发布

问题:

Good morning,

I am making a heat map in ggplot of correlations between specific phenotypes. I would like to label each tile with the R^2 for the association.
I have a correlation matrix, max_all, which looks like this:

    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

Otherwise, my code is as follows:

    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"))

My problem is that I can not get the expression to write out so that 2 is a superscript of R. I realize there are a number of questions on this website addressing similar issues, for example ggplot2 two-line label with expression, Combining paste() and expression() functions in plot labels and Adding Regression Line Equation and R2 on graph but I have been unable to get the solutions suggested in these answers to apply to my case (likely because I have been trying to use a vector of labels).

Thanks a lot for your help.

回答1:

Parse needs to be outside the aes, and the labels need to be a character vector.

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"))