R語言繪圖課程四------ 循序漸進ggplot2中條形圖的繪製

2022-02-05 R語言實踐

    小夥伴們大家吼哇!終於迎來了R語言繪圖專欄的第四次更新的放送,大家是不是有一點饑渴難耐…迫不及待了呢~上一次課程中我們主要介紹了ggplot2包的繪圖原理,理解了映射的概念,用散點圖來展示了數據。但是光會畫散點圖並不能算掌握了數據可視化的核心競爭力,畢竟我們沒看見過一片sci文章中只有寥寥幾張散點圖……或許存在這樣的神仙文章,但這並不能成為優秀的小夥伴們的追求。好了,那麼這一次的課程tkvillage就為大家帶來利用ggplot2包繪製條形圖的方法。

 

geom_bar函數 作為條形圖,最主要的就是要反映離散型數據的分布,讓讀者直觀地看到哪一組數據的數量多/佔有的比例大,兩組數據之間的差異如何。(當然兩組數據之間有沒有差異必須是經過統計學檢驗才能說了算的)geom_bar這個函數的幫助文檔長這個樣子:

我們來介紹幾個常用的參數:

a.    stat:stat默認值是『count』也就是數據的頻數,即個數。它可以對數據進行統計變換,如果換成prop就是百分比。

b.    position:就是條形圖堆放的方式,可以選擇:『dodge』,『fill』,『identtity』,『jitter』,『stack』。這五種方式分別對應為:並列放置、堆疊圖形元素並標準化高度,和為1、不作任何調整,添加擾動、堆棧放置。

c.     width:不用多說,就是柱子的寬度。

下面讓我們利用ggplot2包的內置mpg數據集來畫一張最簡單的條形圖:

Mpg數據集中class這一列是分類型變量。

g_1<- ggplot(data = mpg, aes(manufacturer))+geom_bar()

g_1

這張最簡單的條形圖對於mpg數據集中class這一個變量進行了頻數的展示,告訴了我們每一種分類的汽車有多少個。

然而,在更多情況下,我們其實並不是要做頻數統計這件事情,而是需要利用條形圖繪製出分類變量中其他變量的數值,不要慌,這肯定是可以實現的。

dtx <- data.frame(label = LETTERS[1:5], mean = sample(70:100, 5), sd = sample(1:10,

5))

View(dtx)

p <- ggplot(dtx, aes(x = label, y = mean, ymin = mean - sd, ymax = mean + sd)) +

theme_bw()

p <- p + geom_bar(stat = "identity", width = 0.6, fill = "gray", color ="black") +

geom_errorbar(width = 0.3)

p

p + scale_y_continuous(expand = c(0, 0)) + geom_blank(aes(y = (mean + sd) *1.1))

通過以上代碼我們可以看到若想直接讓y軸展示每組變量的數值,我們需要先計算出來每組變量的平均值,和標準差,然後把他們作為畫圖的元素,所以常常需要我們自行處理、計算原始數據,生成新的數據框,方便我們自己畫圖。

第九行的代碼就是調節y坐標軸的範圍,從而讓圖片每個柱子對到y軸的0刻度水平上面。

2.展示多個變量的條形圖

    當一張條形圖當中需要展示多個統計信息時,就需要將兩個分類變量統一到一張條形圖當中。那麼這張條形圖必定不會以單一的條形柱子來呈現。

    當汽車的class和trans都屬於分類型變量的時候,就需要用分組型條形圖(一種比較簡單的聚類圖)來展現數據。按照上面的代碼,就可以畫出以下的圖片:

可以直觀地展現出來各種類型汽車當中,手動擋還是自動擋的車型比較多。

3.對圖形設置顏色

由於這幾張圖的顏色著實有些浮誇,我們可以自己動手,來調整圖形的顏色。

可以用scale_fill_brewer()這個標量函數:

    是不是看著稍微好一些了。。要想生活過得去,總得頭上帶點綠。還是可以比較容易看得出來在suv汽車中,自動擋的汽車比較多,在compact緊湊級轎車中,手動擋m5的汽車比較多~沒辦法,經濟基礎決定上層建築啊。。。

一個彩蛋

 設置error_bar

啥是error_bar? 簡單來說就是誤差線,一般會以每組數據的平均值±標準差se的形式展現在每個柱子上面,只要畫條形圖,我們就繞不開error_bar這個事情,在ggplot包中,我們可以利用geom_bar()這個函數來進行error_bar的設定。可以看出來,error_bar在ggplot包中也被認為是一種映射對象。所以它值得擁有一個專門的函數來把它畫到畫布之上~

以上四個函數能實現的功能就是在提供x軸數據、y坐標數據的max和min值得情況下繪製不同形態的垂直線段,用來展示誤差線。

cycles<- c(rep('G1',3),rep('S',3),rep('G2',3),rep('M',3),

rep('G1',3),rep('S',3),rep('G2',3),rep('M',3))

condition<- c(rep('control',12),rep('treat',12))

value<- c(sample(70:80,3),sample(10:16,3),sample(20:30,3),sample(1:9,3),

sample(10:20,3),sample(2:10,3),sample(70:80,3),sample(20:30,3))

mydat1<- data.frame(cycles,condition,value)

ggplot(data = mydat1,aes(condition,value,fill=cycles))+

geom_bar(stat = 'identity',position = position_dodge(),width = 0.5)+

scale_fill_brewer(type = 'qual', palette = 7)+

labs(x = '',y = 'Cell cycle percentage', title = '')+

geom_errorbar(aes(ymax=value+se,ymin=value-se),

position=position_dodge(0.5),width=0.15,color='black')+

theme_light()

    這裡我們用的是自己編的數據集,模擬了實驗對照組和加藥處理組細胞周期的變化,可以用如上這種分組條形圖展示出來,可以看出來藥物處理組的G2期細胞比率要明顯高於對照組,對照組的細胞主要在G1期,所以用藥物處理細胞可能會引起細胞阻滯在G2周期。當然這是我們假想的數據,具體情況需要自己做流失細胞術,分析自己的實驗數據。一般要做三組的平行重複~這樣error bar會展示出來組內三個重複數據之間的的差別,從而讓文章讀者看到實驗結果的穩定性。

一個後記

    一百年前,1919年1月18日,一戰戰勝國在巴黎召開「和平會議」。中國派出代表團,以戰勝國身份參加和會,提出取消列強在華的各項特權,取消日本帝國主義與袁世凱訂立的「二十一條」等不平等條約,歸還大戰期間日本從德國手中奪去的山東各項權利等要求。巴黎和會在帝國主義列強操縱下,不但拒絕中國的要求,而且在對德合約上,明文規定把德國在山東的特權,全部轉讓給日本。北洋政府竟準備在「對德和約」上簽字,激起廣大愛國青年學生的「五四運動」,亦稱為「五四風雷」,其標誌了舊民主主義革命和新民主主義革命的分水嶺。

    百年風雨過後,2019年5月4日,當今中國的面貌已經煥然一新,已從百年前的積貧積弱、千瘡百孔中復甦並漸漸崛起。此過程,離不開無數先輩們的無畏犧牲和無私奉獻;他們(在不同的領域,默默無聞但無比堅定)付出自己的汗水、智慧,放棄個人前途、名利,甚至犧牲了家庭的幸福,為的是國家的發展和進步,這其中或許就包括了你我的祖輩、父輩。

    現今的中國,距離真正的富強仍有一段路要走,作為剛進入社會的萬千青年人之一,十分感激各位老師和前輩們的無私傳授,也逐漸明白了我們肩上的責任;五四運動中以暴力反對反動政治只是表象,這個時代的年輕人或許對』個人奮鬥『與「家國情懷」之間的關係有著不同的理解,但「愛國、進步、民主、科學」的五四精神根植於一代又一代中國青年思想當中。祝願各位在各自的專業領域中,能找到自己努力的方向,有所堅持。

相關焦點

  • R語言——ggplot2的繪圖邏輯
    在R語言裡,談及繪圖,ggplot2是最出名的繪圖包之一,作為一個繪圖神器,它提供了許許多多的功能給用戶使用,僅用短短幾行代碼,一幅幅高端大氣的圖像便躍然紙上,這可能就是ggplot2包的魅力所在。,    #ggplot2繪圖                         y=Sepal.Width))+        #繪製底層畫布                         geom_point(color = "darkred")    #在畫布上添加點從上述代碼可以看出,ggplot繪圖有以下兩個特點:(1)有明確的開始
  • R語言繪製條形圖
    作者:吳健 中國科學院大學 R語言、統計學愛好者,尤其擅長R語言和Arcgis在生態領域的應用分享個人公眾號:統計與程式語言
  • R語言中繪製條形圖的函數:barplot
    條形圖(bar chart)是用寬度相同的條形的高度或長短來表示數據多少的圖形。它主要用來展示不同分類(橫軸)下某個數值型變量(縱軸)的取值。在實際中,條形圖主要有簡單條形圖,組合條形圖和堆疊條形圖。在R語言的基礎包中可以使用barplot()函數來繪製條形圖。
  • R語言繪圖之ggplot2
    那麼今天我們就為大家介紹一下目前在R語言中流行的繪圖包ggplot2。1. ggplot2的安裝:install.packages("ggplot2")。2. ggplot2的繪圖原理: ggplot2的核心理念是將繪圖與數據分離,數據相關的繪圖與數據無關的繪圖分離,並按圖層作圖。
  • R語言實戰(19)——使用ggplot2進行高級繪圖
    後臺回復「R語言實戰」即可獲取二維碼加入R語言實戰學習討論群。19.1 ggplot2包介紹ggplot2包是使用R進行數據可視化的重要工具,提供一個全面的、基於語法的、連貫一致的圖形生成系統,允許用戶創建新穎的、有創新性的數據可視化圖形。ggplot2的語法1. 在ggplot2中,圖是採用串聯起來(+)號函數創建的。每個函數修改屬於自己的部分。
  • R語言繪圖(一):barplot()繪製條形圖
    條形圖:表示矩形條中的數據,條的長度與變量的值成比例。R語言中bartplot()函數可用於創建條形圖。
  • 如何在Python裡用ggplot2繪圖
    ggplot2的繪圖方法不僅確保每個繪圖包含特定的基本元素,而且在很大程度上簡化了代碼的可讀性。但是,如果您經常使用Python,那麼實現圖形語法將非常具有挑戰性,因為在流行的繪圖庫(如matplotlib或seaborn)中缺少標準化語法。如果您仍然希望使用圖形語法,那麼Python包plotnine為您提供了另一種選擇。
  • R語言 ggplot2 繪圖入門,看完你就理解ggplot2的繪圖邏輯了
    R語言最擅長繪圖。R語言最擅長的繪圖包是ggplot2,由於很多朋友沒有接觸過ggplot2,必須要對其語言方式有個初步的認識。
  • 免費資源 | R語言可視化繪圖,讓你的SCI論文更加完美
    在一篇SCI論文中,最能吸引到審稿人的除了標題和摘要,可能就是文章中出現的各種圖表啦!所以說如何讓圖形更完美的呈現在文章中,一直是所有科研人士探索的課題。今天小喵給大家分享的就是,R的另一個強大的功能——繪圖功能。其製圖有印刷的素質,也可加入數學符號。這次的視頻詳細介紹了R語言可視化繪圖的操作,希望大家看過之後能夠掌握這樣技能。注意:想要領取資源的小夥伴們,請點擊文末了解更多哦!!
  • R語言基礎繪圖barplot與各種條形圖(1)
    此篇主要介紹一下R語言繪製各式的條形圖;需要對R語言有一定的了解,只要有興趣,學習很簡單。
  • 手把手教學,R語言基礎繪圖
    而其本質作為程式語言,具有著強大的拓展和開發能力,可以編制自己的函數,或製作獨立的統計分析包、快速實現新算法。R軟體可以從其官網(https://www.r-project.org/)下載安裝。R提供了超過4000個包,這些包可以實現很多不同的功能,而R自帶了一系列的默認包,利用這些默認包,就可以畫出一些基礎的圖形。
  • R語言統計與繪圖:ggplot2圖形組合布局
    在科研論文中,有時我們需要繪製幾張圖形,並將這幾張圖形整合到一張大圖上面。前面我們學習了基礎繪圖包怎麼組合布局圖形,今天來學習兩個新函數,看ggplot2繪製的圖形怎麼組合。ggplot2組合圖形布局可以使用Rmisc包的multiplot()函數,也可以使用ggpubr包的ggarrange()函數。1.
  • R語言繪圖--PCA圖
    在生物信息分析中,PCA常用於分析不同樣本之間的相互關係,可以基於表達量或者SNP突變類型進行分析。R語言是一門專門針對統計繪圖等需求設計的程式語言,在R語言中,內置了PCA分析的函數prcomp。直接調用這個函數可快速針對一組數據進行PCA分析。配合ggplot2等繪圖包,可以方便的生成PCA分析可視化結果。
  • 乾貨 | 繪圖的基本元素(ggplot2實現)
    用R進行數據可視化可以有多種選擇,你可以用R的基礎繪圖系統,也可以使用其他的包,例如ggplot2、Lattice等等。作為一個懶人,最開始使用基礎的R繪圖系統時感覺非常蹩腳,後來開始嘗試ggplot2便一直用到現在。在ggplot2的github上有一個頁面列出了為什麼使用ggplot2的理由,我個人將這些理由總結為四點,以下將分別說明。
  • R語言繪圖—李克特圖
    收錄於話題 #R語言繪圖這在問卷調查中經常用到,那麼我們怎麼來可視化問卷結果呢?在R中李克特量表的繪製可通過Likert包來實現。Likert包,旨在幫助分析和可視化Likert類型的項目。
  • Day7:R語言課程 (R語言進行數據可視化)
    如果你有興趣了解基本R功能的繪圖,查看課程(https://hbctraining.github.io/Intro-to-R/lessons/basic_plots_in_r.html)。在本課中主要學習ggplot2繪圖。基礎包繪圖應用越來越少,因為ggplot2與基本R繪圖函數相比功能更強大。ggplot2語法需要一些時間來適應,但一旦學會,會發現它非常強大、靈活。
  • ggplot2繪圖之四:散點圖、折線圖,點線圖
    為避免消化不良,引起不適,特此建議:說明1:為了更全面地了解和學習ggplot2繪圖,建議沒有觀看前三期的同學可以先打卡前三期視頻
  • Python繪圖筆記:繪製四色散點圖和誤差條形圖
    1.散點圖一figure1#導入繪製散點圖所需要的包plt.rcParams['font.sans-serif'] = ['SimHei']#生成圖紙,繪製兩幅子圖,分成兩行,共享x軸坐標fig,(ax0,ax1)=plt.subplots(nrows=2,sharex=True)#繪製第一幅誤差條形圖,誤差條分布方向為縱向,上下誤差條對稱分布
  • R語言之ggplot2繪圖
    ,也離不開這些漂亮的圖表,好的圖表不止能夠讓閱讀者通俗易懂,更能讓老闆眼前一亮,R語言中的ggplot2包即能滿足,圖表酷炫、簡單明了,使用起來也比較簡單方便,直接調用即可,本文主要介紹該包的一些簡單的用法和作圖技巧。
  • AI繪圖、R語言基礎及ggplot2繪圖教程合集
    Part1公眾號及作者介紹:1公眾號:旨在幫助更多的科研小白入門科研,目前主要涉及的教程內容包括:AI科研繪圖從入門到精通,生信必備的R語言基礎教程及R語言繪圖從入門到精通。後續還會繼續更新關於統計學、Linux作業系統、以及GEO和TCGA數據挖掘相關的視頻教程,敬請期待吧!