ggplot2添加特殊字符一文就夠

之前寫(xiě)過(guò)一篇文檔來(lái)介紹如何給標(biāo)簽添加特殊字符,近來(lái)有朋友需要畫(huà)圖正好又遇到更加復(fù)雜的需求豆巨,索性來(lái)一篇文檔對(duì)此進(jìn)行歸納總結(jié)

之前的方法通過(guò)bquote函數(shù)進(jìn)行特殊字符格式的添加,如下所示

iris %>% as_tibble() %>% 
  ggplot(aes(Sepal.Length,Sepal.Width,fill=Species))+
  geom_point(size=4,pch=21,color="white")+
  xlab(bquote(Assimilation (mu~ mol ~CO[2]~ m^-2~s^-1)))+
  theme_classic()

如果我們需要在圖中添加特殊字符文本該如何進(jìn)行操作,同時(shí)給不同字符加以不同顏色又該如何進(jìn)行設(shè)置捷枯,ggtext的出現(xiàn)很好的解決了這一問(wèn)題

通過(guò)字符編號(hào)添加特殊字符
iris %>% as_tibble() %>% 
  ggplot(aes(Sepal.Length,Sepal.Width,fill=Species))+
  geom_point(size=4,pch=21,color="white")+
  theme_classic()+
  labs(x="Assimilation(\u03bc molCO<sub>2</sub>m<sup>-2s</sup>-1)",
       y=NULL)+
  theme(axis.title.x = element_markdown(color="#3B9AB2",vjust=0.5))

可以看到通過(guò)u03bc 此字符編號(hào)添加了特殊字符,那么有沒(méi)有其它的方法呢专执,當(dāng)然有請(qǐng)繼續(xù)往下看

iris %>% as_tibble() %>% 
  ggplot(aes(Sepal.Length,Sepal.Width,fill=Species))+
  geom_point(size=4,pch=21,color="white")+
  theme_classic()+
  labs(title="TEST &mu;",
    x="Assimilation(<span style='color:#F98400;'>
    &mu;</span>molCO<sub>2</sub>m<sup>-2s</sup>-1)",
    y="<span style='color:#F98400;'>&alpha;&beta;</span>")+
  theme(plot.title=element_markdown(),
    axis.title.x = element_markdown(color="#3B9AB2"),
    axis.title.y = element_markdown())

此圖通過(guò)另外一種方式添加了特殊字符淮捆,也對(duì)部分字符顏色進(jìn)行了定義,那同樣我們也可以對(duì)字體大小等進(jìn)行定義

下面展示一個(gè)小細(xì)節(jié)本股,此處含有端倪

可以看到我們將Y軸文本移至了右邊争剿,因此標(biāo)簽也需要定義到右邊axis.title.y.right

ggplot(data.frame(x = c(-5, 5)), aes(x)) +
  stat_function(fun = ~ .x*.x)+
  labs(
    x = "independent variable *x*",
    y = "dependent variable *y* = *x*<sup>2</sup>"
  ) +
  scale_y_continuous(position = "right") +
  theme(
    axis.title = element_text(color = "#0072B2",
                              size = rel(1)),
    axis.title.x = element_markdown(),
    axis.title.y.right = element_markdown()
  )

經(jīng)上面的介紹特殊字符的添加已經(jīng)變得非常容易了,但是有沒(méi)有發(fā)現(xiàn)所展示的案例基本都是在圖形外部添加字符痊末,有時(shí)我們也需要在圖內(nèi)部添加這些特殊字符蚕苇,因此這一部分也很重要

內(nèi)部添加特殊字符

定義字符位置信息

df <- tibble(
  label = c("SiO<sub>4</sub><sup>4-",
            "NO<sup>2-","&mu;",
            "&alpha;&beta;","R<sup>2</sup>=0.001",
            "p_value< 2.1e<sup>-16</sup>"),
  x = c(4.8,4.8,8,7,6.5,7.5),
  y = c(4.1,4.3,2.3,4.2,4,4),
  angle=c(0,10,0,0,0,0),
  color= c("black","blue","black","red","green","black"))

添加文本

iris %>% as_tibble() %>% 
  ggplot(aes(Sepal.Length,Sepal.Width,fill=Species))+
  geom_point(size=4,pch=21,color="white")+
  theme_classic()+
  labs(x="Assimilation(\u03bc molCO<sub>2</sub>m<sup>-2s</sup>-1)",
       y=NULL)+
  theme(axis.title.x = element_markdown(color="#3B9AB2",vjust=0.5))+
  geom_richtext(data=df,aes(x,y,label=label,angle=angle,color=color),
                fill=NA,label.color=NA,show.legend = F)

文本添加邊框

iris %>% as_tibble() %>% 
  ggplot(aes(Sepal.Length,Sepal.Width,fill=Species))+
  geom_point(size=4,pch=21,color="white",show.legend = F)+
  theme_classic()+
  labs(x="Assimilation(\u03bc molCO<sub>2</sub>m<sup>-2s</sup>-1)",
       y=NULL)+
  theme(axis.title.x = element_markdown(color="#3B9AB2",vjust=0.5))+
  geom_richtext(data=df,aes(x,y,label=label,angle=angle),
                fill=NA,show.legend = F)

添加標(biāo)題

ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
  geom_point(size = 3) +
  scale_color_manual(
    name = NULL,
    values = c(setosa = "#0072B2", virginica = "#009E73", versicolor = "#D55E00"),
    labels = c(
      setosa = "<i style='color:#0072B2'>I. setosa  &mu; </i>",
      virginica = "<i style='color:#009E73'>I. virginica  &mu; </i>",
      versicolor = "<i style='color:#D55E00'>I. versicolor  &mu; </i>")
  ) +
  labs(
    title = "**Fisher's *Iris* dataset(test unicode symbol: &mu;)**  
    <span style='font-size:11pt'>Sepal width vs. sepal length for three *Iris*
    species  &mu; </span>") +
  theme_minimal() +
  theme(
    plot.title = element_markdown(lineheight = 1.1),
    legend.text = element_markdown(size = 11),
    axis.title.x = element_markdown(hjust = 0.5),
    axis.title.y = element_markdown(vjust = 0.5))

在上圖中我們對(duì)部分字體大小及字體類(lèi)型進(jìn)行了設(shè)置,并進(jìn)行了換行操作凿叠,此處用到了一些markdown語(yǔ)法

給標(biāo)題更豐富的花樣

base <- mtcars %>%
  mutate(
    transmission = ifelse(am == 1, "automatic", "manual")
  ) %>%
  ggplot(aes(hp, mpg, color = transmission)) +
  geom_point(size = 2) +
  scale_color_manual(
    values = c(automatic = "#0072B2", manual = "#D55E00"),
    guide = "none"
  ) +
  labs(
    x = "Horse power",
    y = "Miles per gallon (MPG)",
    title = "Transmission type impacts fuel efficiency<br>
<span style = 'font-size:10pt;'>Miles per gallon (MPG) is on average higher for cars
with <span style = 'color:#0072B2;'>automatic transmission</span> than for cars with
<span style = 'color:#D55E00;'> manual transmission.</span> However, MPG generally
declines with increasing horse power.</span>"
  ) +
  theme_bw() + theme(plot.title.position = "plot")

base +
  theme(
    plot.title = element_textbox_simple(
      size = 14, lineheight = 1, padding = margin(0, 0, 5, 0)
    )
  )

給標(biāo)題添加邊框

base +
  theme(
    plot.title = element_textbox_simple(
      size = 14, lineheight = 1,
      linetype = 1,
      box.color = "#748696",
      fill = "#F0F7FF",
      r = grid::unit(3, "pt"),
      padding = margin(5, 5, 5, 5),
      margin = margin(0, 0, 10, 0)
    )
  )

控制邊框位置

base +
  theme(
    plot.title = element_textbox_simple(
      size = 14, lineheight = 1, 
      width = grid::unit(4, "in"),
      hjust = 1, 
      linetype = 1, 
      box.color = "#748696",
      fill = "#F0F7FF", 
      r = grid::unit(3, "pt"), 
      padding = margin(5, 5, 5, 5),
      margin = margin(0, 0, 10, 0)
    )
  )

喜歡的小伙伴歡迎關(guān)注我的公眾號(hào)

R語(yǔ)言數(shù)據(jù)分析指南涩笤,持續(xù)分享數(shù)據(jù)可視化的經(jīng)典案例及一些生信知識(shí),希望對(duì)大家有所幫助

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盒件,一起剝皮案震驚了整個(gè)濱河市蹬碧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炒刁,老刑警劉巖恩沽,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異翔始,居然都是意外死亡罗心,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)城瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渤闷,“玉大人,你說(shuō)我怎么就攤上這事脖镀§” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)弦蹂。 經(jīng)常有香客問(wèn)我肩碟,道長(zhǎng),這世上最難降的妖魔是什么凸椿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任削祈,我火速辦了婚禮,結(jié)果婚禮上削饵,老公的妹妹穿的比我還像新娘岩瘦。我一直安慰自己未巫,他們只是感情好窿撬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叙凡,像睡著了一般劈伴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上握爷,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天跛璧,我揣著相機(jī)與錄音,去河邊找鬼新啼。 笑死追城,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的燥撞。 我是一名探鬼主播座柱,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼物舒!你這毒婦竟也來(lái)了色洞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤冠胯,失蹤者是張志新(化名)和其女友劉穎火诸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體荠察,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡置蜀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悉盆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾碗。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舀瓢,靈堂內(nèi)的尸體忽然破棺而出廷雅,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布航缀,位于F島的核電站商架,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芥玉。R本人自食惡果不足惜蛇摸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望灿巧。 院中可真熱鬧赶袄,春花似錦、人聲如沸抠藕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盾似。三九已至敬辣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間零院,已是汗流浹背溉跃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留告抄,地道東北人撰茎。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像打洼,于是被迫代替她去往敵國(guó)和親龄糊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容