ggplot2绘图小技巧(1) 修改特殊字符

本节不介绍新的绘图案例,这一节来介绍一个绘图中的小细节,如何修改图形轴文本中的特殊字符,主要介绍两种方法通过最常见的两个案例来进行展示,下面来看具体案例

加载R包

library(tidyverse)
library(linkET)
library(RColorBrewer)
library(ggtext)
library(magrittr)
library(reshape)
library(psych)

# devtools::install_github("Hy4m/linkET", force = TRUE)

加载数据

varechem <- read_tsv("varechem.xls")
varespec <-  read_tsv("varespec.xls")

案例一

例一主要介绍在常见的相关性热图中如何修改含有特殊字符的轴文本,由于完全是ggplot2语法所以使用 scale_ 函数完美兼容,主要代码如下;这类方法通用性很高很多图形中都能适用

scale_y_discrete(expand=c(0,0),position = 'right',
                   labels=c("N"=expression(NH[4]^+""),
                            "Ca"=expression(CaSO[4])))

计算相关性

table1 <- varechem
table2 <- varespec %>% select(1:20)

pp <- corr.test(table1,table2,method="pearson",adjust = "fdr")

整合数据

df <- melt(pp$r) %>% mutate(pvalue=melt(pp$p)[,3],
                           p_signif=symnum(pvalue, corr = FALSE, na = FALSE,  
                                           cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 
                                           symbols = c("***", "**", "*", "", " "))) %>% 
  set_colnames(c("env","genus","r","p","p_signif"))

数据可视化

df %>% ggplot(.,aes(genus,env,col=r,fill=r))+
  geom_tile(color="grey80",fill="white",size=0.3)+
  geom_point(aes(size =abs(r)),shape=21)+
  geom_text(aes(label=p_signif),size=4,color="white",hjust=0.5,vjust=0.7)+
  labs(x = NULL,y = NULL,color=NULL,fill=NULL)+
  scale_color_gradientn(colours = rev(RColorBrewer::brewer.pal(11,"RdBu")))+
  scale_fill_gradientn(colours = rev(RColorBrewer::brewer.pal(11,"RdBu")))+
  scale_y_discrete(expand=c(0,0),position = 'right',
                   labels=c("N"=expression(NH[4]^+""),
                            "Ca"=expression(CaSO[4])))+
  scale_x_discrete(expand=c(0,0)) +
  theme(axis.text.x=element_text(angle =90,hjust =1,vjust =0.5,
                                 color="black",face = "bold",size = 10),
        axis.text.y=element_text(color="black",face = "bold",size =10),
        axis.ticks= element_blank(),
        panel.spacing.y = unit(0,"cm"))+
  scale_size(range=c(1,10),guide=NULL)+
  guides(color=guide_colorbar(direction="vertical",reverse=F,barwidth=unit(.5,"cm"),
                              barheight=unit(11,"cm")))

案例二

案例二中我们使用linkET包来绘制相关性热图,此图近期朋友圈出境很频繁,但若文本中含有特殊字符该如何修改,小编初次使用上述 scale_ 函数修改名称出现不兼容的情况;后续发现可以使用ggtext::element_markdown函数通过markdown语法来解决此问题,那么前提就是在data.frame中将含有特殊字符的名称改为markdown格式,如下所示

修改名称

varechem2 <-  varechem %>% 
  dplyr::rename("NH<sub>4</sub><sup>+</sup>"="N")

数据分析

mantel <- mantel_test(varespec, varechem2,
                      spec_select = list(Spec01 = 1:7,
                                         Spec02 = 8:18,
                                         Spec03 = 19:37,
                                         Spec04 = 38:44)) %>% 
  mutate(rd = cut(r, breaks = c(-Inf, 0.2, 0.4, Inf),
                  labels = c("< 0.2", "0.2 - 0.4", ">= 0.4")),
         pd = cut(p, breaks = c(-Inf, 0.01, 0.05, Inf),
                  labels = c("< 0.01", "0.01 - 0.05", ">= 0.05")))

数据可视化

qcorrplot(correlate(varechem2,method = "pearson"),diag=F,type="upper")+
  geom_tile()+
  geom_mark(size=2.5,sig.thres=0.05,sep="\n")+
  geom_couple(aes(colour=pd,size=rd),data=mantel,label.colour = "black",
              curvature=nice_curvature(0.15),
              nudge_x=0.2,
              label.fontface=2,
              label.size =4,
              drop = T)+
  scale_fill_gradientn(colours = RColorBrewer::brewer.pal(11,"RdBu"))+
  scale_size_manual(values = c(0.5, 1, 2)) +
  scale_colour_manual(values =c("#D95F02","#1B9E77","#A2A2A288")) +
  guides(size = guide_legend(title = "Mantel's r",override.aes = list(colour = "grey35"), order = 2),
         colour = guide_legend(title = "Mantel's p",override.aes = list(size = 3), order = 1),
         fill = guide_colorbar(title = "pearson's r",order = 3))+
  theme(plot.margin = unit(c(0,0.,0,0),units="cm"),
        legend.background=element_blank(),
        legend.key = element_blank(),
        axis.text=element_markdown(color="black",size=10))  

可以看到通过上述代码完美解决了修改特殊字符的问题,绘制一张好图所需要的细节实在是太多了,喜欢的朋友欢迎关注

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容