ggplot r中的热图标签中的上标

时间:2015-09-04 08:42:06

标签: r ggplot2 expression superscript

早上好,

我在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 expressionCombining paste() and expression() functions in plot labelsAdding Regression Line Equation and R2 on graph,但我无法将这些答案中建议的解决方案应用于我的情况(可能是因为我一直在尝试使用标签矢量)。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

Parse需要在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

相关问题