好物分享:ggsignif——優(yōu)雅添加顯著性標(biāo)記

該包目前僅適用于利用 ggplot2 進(jìn)行繪制的圖形

我們?cè)诶胓gplot2進(jìn)行數(shù)據(jù)可視化的時(shí)候經(jīng)常會(huì)需要對(duì)兩組數(shù)據(jù)進(jìn)行比較松申,并添加顯著性標(biāo)記,自己學(xué)習(xí)之余,也給大家分享一個(gè)好用的添加顯著性標(biāo)記的包:ggsignif

  • ggsignif: Significance Brackets for ‘ggplot2’

PART1:安裝

#從cran安裝:
install.packages("ggsignif")
#從GitHub安裝(最新版):
install.packages("remotes")
remotes::install_github("const-ae/ggsignif")

PART2:函數(shù)部分參數(shù)詳解

?geom_signif

函數(shù)幫助文檔如下:

geom_signif(
  mapping = NULL,
  data = NULL,
  stat = "signif",
  position = "identity",
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE,
  comparisons = NULL,
  test = "wilcox.test",
  test.args = NULL,
  annotations = NULL,
  map_signif_level = FALSE,
  y_position = NULL,
  xmin = NULL,
  xmax = NULL,
  margin_top = 0.05,
  step_increase = 0,
  extend_line = 0,
  tip_length = 0.03,
  size = 0.5,
  textsize = 3.88,
  family = "",
  vjust = 0,
  parse = FALSE,
  manual = FALSE,
  orientation = NA,
  ...
)

在這些里面墙杯,我們常用的一些參數(shù)就是這些啦:

· comparisons #指定比較對(duì)象,是一個(gè)由長度為2的向量組成的列表
· test #指定使用的檢驗(yàn)方法括荡,包括 wilcox.test 和 t.test
· annotations #指定注釋的內(nèi)容
· map_signif_level #布爾型變量高镐,如果為TRUE,就用諸如***的形式來展示顯著性差異
· y_position #指定標(biāo)記在y軸方向上的坐標(biāo)一汽,是個(gè)數(shù)字向量
· xmin, xmax #指定標(biāo)記在x軸方向上的位置避消,是個(gè)數(shù)字向量
· tip_length #指定標(biāo)記小豎線的長度,是個(gè)數(shù)字向量
· size #指定標(biāo)記尺寸召夹,即線條的粗線
· textsize #指定標(biāo)記中文字部分的大小
· family #指定標(biāo)記中文字部分的字體
· vjust #指定標(biāo)記部分中的文字與標(biāo)記中的短橫線之間的距離岩喷,負(fù)值在橫線上方,正值在下方
· orientation #指定整個(gè)圖的方向监憎,一般不會(huì)修改纱意,如果想讓圖“躺下”,就設(shè)置成為"y"

PART3:示例——以ggplot2內(nèi)置數(shù)據(jù)集mpg為例

問題描述:
我們想繪制一個(gè)箱型圖鲸阔,橫軸為每輛車的車型偷霉,縱坐標(biāo)為hwy迄委,使用mpg數(shù)據(jù)集,其結(jié)構(gòu)如下:

library(ggplot2)
head(mpg)

# A tibble: 6 x 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class  
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

開始繪制:

library(ggsignif)

ggplot(data = mpg, aes(x = class, y = hwy)) + 
  geom_boxplot(aes(group = class, fill = class), size = 1) + #指定箱子線條寬度為1
  geom_signif(comparisons = list(c("midsize", "minivan"), c("compact", "midsize")), #指定比較對(duì)象
              test = "t.test", #指定檢驗(yàn)方法
              y_position = c(40, 47), #指定兩個(gè)標(biāo)記在y軸上的坐標(biāo)类少,按照前面指定比較對(duì)象的順序
              size = 1, #指定標(biāo)記中線條的尺寸
              textsize = 5, #指定標(biāo)記中文字部分的大小
              vjust = -0.3, #指定標(biāo)記中文字部分與橫線之間的距離
              tip_length = c(0.2, 0.45, 0.05, 0.05), #指定短豎線的長度
              map_signif_level = T) + 
  scale_y_continuous(limits = c(10, 55)) +
  theme(legend.position = "none",
        panel.background = element_rect(fill = NA),
        panel.border = element_rect(fill = NA, colour = "black", size = 1),
        axis.title = element_text(size = 15, face = "bold"),
        axis.text.x = element_text(size = 12, hjust = 1, angle = 45, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"))

成圖:



丑是丑了點(diǎn)叙身,但還是湊合,畢竟針對(duì)主題的修改美化沒有花大力氣硫狞。需要注意的幾個(gè)點(diǎn):

  • 關(guān)于y軸范圍:
    y軸的范圍在這里很重要信轿,范圍不合適會(huì)直接導(dǎo)致顯著性標(biāo)記溢出圖外,顯示不全残吩,所以可以用 scale_y_*(limits = numeric.vecter) 或者 ylab() 指定范圍财忽,保證好看的前提下盡可能大一點(diǎn)。
  • 關(guān)于短豎線的長度:
    短豎線長度指定的數(shù)值向量中數(shù)值的順序應(yīng)該是與你指定的比較對(duì)象的出現(xiàn)順序是一致的泣侮,這個(gè)參數(shù)可以慢慢一個(gè)一個(gè)修改即彪,多試試就好了。

PART4:來點(diǎn)花的——何必一定是顯著性標(biāo)記活尊?

前面的函數(shù)幫助文檔里有 annotations 參數(shù)隶校,讓人不禁想試試(狗頭)。
話不多說酬凳,直接開始:
問題描述:我們想把上面的圖中的 NS. 和 *** 分別替換成為字母 A 和 B惠况。
一樣的代碼:

ggplot(data = mpg, aes(x = class, y = hwy)) + 
  geom_boxplot(aes(group = class, fill = class), size =1) +
  geom_signif(comparisons = list(c("midsize", "minivan"), c("compact", "midsize")),
              annotations = c("B", "A"), #差別在這兒
              y_position = c(40, 47),
              size = 1,
              textsize = 5,
              vjust = -0.3,
              tip_length = c(0.2, 0.45, 0.05, 0.05)) + 
  scale_y_continuous(limits = c(10, 55)) +
  theme(legend.position = "none",
        panel.background = element_rect(fill = NA),
        panel.border = element_rect(fill = NA, colour = "black", size = 1),
        axis.title = element_text(size = 15, face = "bold"),
        axis.text.x = element_text(size = 12, hjust = 1, angle = 45, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"))

出圖:


PART5:讓圖“躺”下來遭庶?

  • 第一種方法:使用 orientation 參數(shù):
ggplot(data = mpg, aes(x = hwy, y = class)) +  #這里改了
  geom_boxplot(aes(group = class, fill = class), size =1, orientation = "y") +
  geom_signif(comparisons = list(c("midsize", "minivan"), c("compact", "midsize")),
              test = "t.test",
              y_position = c(40, 47),
              size = 1,
              textsize = 5,
              vjust = -0.3,
              tip_length = c(0.2, 0.45, 0.05, 0.05),
              map_signif_level = T,
              orientation = "y") +  #這里改了
  scale_x_continuous(limits = c(10, 55)) + #這里改了
  theme(legend.position = "none",
        panel.background = element_rect(fill = NA),
        panel.border = element_rect(fill = NA, colour = "black", size = 1),
        axis.title = element_text(size = 15, face = "bold"),
        axis.text.x = element_text(size = 12, hjust = 1, angle = 45, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"))
  • 第二種方法:使用 coord_flip()
ggplot(data = mpg, aes(x = class, y = hwy)) + 
  geom_boxplot(aes(group = class, fill = class), size =1) +
  geom_signif(comparisons = list(c("midsize", "minivan"), c("compact", "midsize")),
              test = "t.test",
              y_position = c(40, 47),
              size = 1,
              textsize = 5,
              vjust = -0.3,
              tip_length = c(0.2, 0.45, 0.05, 0.05),
              map_signif_level = T) + 
  scale_y_continuous(limits = c(10, 55)) +
  theme(legend.position = "none",
        panel.background = element_rect(fill = NA),
        panel.border = element_rect(fill = NA, colour = "black", size = 1),
        axis.title = element_text(size = 15, face = "bold"),
        axis.text.x = element_text(size = 12, hjust = 1, angle = 45, color = "black"),
        axis.title.y = element_text(size = 12, color = "black")) +
  coord_flip() #只改了這里

出圖:


最后附上GitHub鏈接宁仔,有什么問題就去逛逛和留言吧~

https://github.com/const-ae/ggsignif

每天都進(jìn)行一個(gè)魚??的摸。峦睡。翎苫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榨了,隨后出現(xiàn)的幾起案子煎谍,更是在濱河造成了極大的恐慌,老刑警劉巖龙屉,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐粘,死亡現(xiàn)場離奇詭異,居然都是意外死亡转捕,警方通過查閱死者的電腦和手機(jī)作岖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來五芝,“玉大人痘儡,你說我怎么就攤上這事∈嗖剑” “怎么了沉删?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵渐尿,是天一觀的道長。 經(jīng)常有香客問我矾瑰,道長砖茸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任殴穴,我火速辦了婚禮渔彰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘推正。我一直安慰自己恍涂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布植榕。 她就那樣靜靜地躺著再沧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尊残。 梳的紋絲不亂的頭發(fā)上炒瘸,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音寝衫,去河邊找鬼顷扩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛慰毅,可吹牛的內(nèi)容都是我干的隘截。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼汹胃,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼婶芭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起着饥,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤犀农,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宰掉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呵哨,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年轨奄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孟害。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戚绕,死狀恐怖纹坐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤耘子,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布果漾,位于F島的核電站,受9級(jí)特大地震影響谷誓,放射性物質(zhì)發(fā)生泄漏绒障。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一捍歪、第九天 我趴在偏房一處隱蔽的房頂上張望户辱。 院中可真熱鬧,春花似錦糙臼、人聲如沸庐镐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽必逆。三九已至,卻和暖如春揽乱,著一層夾襖步出監(jiān)牢的瞬間名眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工凰棉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留损拢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓撒犀,卻偏偏與公主長得像福压,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绘证,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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