R語言基於表格檔案的資料繪製具有多個系列的柱狀圖與直方圖

疯狂学习GIS發表於2024-07-22

  本文介紹基於R語言中的readxl包與ggplot2包,讀取Excel表格檔案資料,並繪製具有多個系列柱狀圖條形圖的方法。

  首先,我們配置一下所需用到的R語言readxl包與ggplot2包;其中,readxl包是用來讀取Excel表格檔案資料的,而ggplot2包則是用以繪製柱狀圖的。包的下載方法也非常簡單,以readxl包為例,我們輸入如下的程式碼即可。

install.packages("readxl")

  輸入程式碼後,按下回車鍵,執行程式碼;如下圖所示。

image

  待readxl包下載完成後,透過同樣的方法配置ggplot2包。

install.packages("ggplot2")

  此外,在用程式碼進行資料分析、視覺化時,有時需要對資料加以長資料寬資料的轉換(具體什麼意思在後文有介紹),這裡需要用到另一個R語言包reshape2,我們也就在此將其一併配置好。

install.packages("reshape2")

  接下來,我們即可開始程式碼的撰寫。首先,我們將需要用到的包匯入。

library(readxl)
library(ggplot2)
library(reshape2)

  隨後,我們進行Excel表格檔案資料的讀取;這裡我們就透過readxl包中的read_excel()函式來實現表格資料的讀取。其中,函式的第一個參數列示待讀取的Excel表格檔案路徑與名稱,第二個引數則表示這些資料具體在哪一個Sheet中;由於我這裡需要的資料存放在Excel表格檔案的第2Sheet中,因此就選擇sheet = 2即可。

xlsx_file <- read_excel(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\Result\Result.xlsx)", sheet = 2)

  其中,原本在表格檔案中我的資料如下所示。

  透過上述程式碼,我們即可將資料讀入R語言中;其具體格式如下圖所示。可以看到,讀入後的資料是一個tibble類別的變數,tibbleData Frame格式資料的一種改進,我們在這裡可以就將其視作Data Frame格式資料加以後續處理。

  此外,如果大家是使用RStudio軟體進行程式碼的撰寫,還可以雙擊這一變數,更直觀地檢視讀入後的資料具體是什麼樣子的,如下圖所示。

  接下來,我們需要對資料加以長、寬轉換。首先,簡單來說,寬資料就是如上圖所示的資料,而長資料則是如下圖所示的資料;其中,我們在獲取、記錄原始資料時,往往獲取的是寬資料,因為這一類資料具有更加直觀、更易記錄的特點;而在用資料分析軟體或程式碼對資料加以深入處理或視覺化操作時,往往系統需要的是長資料。因此,我們這裡需要對寬資料長資料加以轉換;這一轉換可以透過melt()函式來實現,具體的程式碼如下所示。

xlsx_data <- melt(xlsx_file, id.var = "...1")

  其中,melt()函式的第一個參數列示需要進行轉換的變數,第二個引數則是ID變數,一般情況下就是表述資料序號的第一列資料;我這裡由於原本Excel的資料中就沒有表示序號的那一列資料,因此就選擇了原有資料的第一列作為ID變數。執行上述程式碼後,我們得到的長資料如下圖所示。

  此外,melt()函式在執行時,還可以指定資料轉換後的列名。如以下程式碼就表示,我們希望將轉換後表示變數的列的名稱設定為Factor,表示觀測值的列的名稱設定為q

xlsx_data <- melt(xlsx_file, id.var = "...1", variable.name = "Factor", value.name = "q")

  執行上述程式碼,得到的長資料如下圖所示。

  當然,這裡需要提一句,關於寬資料長資料的轉換,涉及到很多內容;如果大家有需要,可以檢視melt()函式的官方幫助文件。

  完成資料格式轉換後,我們即可開始繪圖。這裡我們就直接透過ggplot2包的ggplot()函式,對柱狀圖加以繪製即可;具體程式碼如下所示。

ggplot(data = xlsx_data, mapping = aes(x = Factor, y = q, fill = ...1)) + geom_bar(stat = "identity", position = "dodge")

  其中,ggplot()函式的第一個引數data表示需要參與繪圖的資料,第二個引數mapping表示我們需要用哪一列資料作為X軸,哪一列作為Y軸;同時,其內部的fill參數列示我們需要將柱狀圖分為多個系列(如果大家的柱狀圖只有1個系列,那麼就不需要fill這個引數了),其後指定的變數就表示我們需要基於這一變數對資料的系列加以區分。接下來,加號後面的geom_bar引數,是我們繪製多序列柱狀圖所需要設定的,其中position引數設定為"dodge"就表示我們希望將不同的系列平行放置(如果不設定position引數,那麼不同系列的柱子就會垂直堆積,有點類似堆積柱狀圖)。

  執行上述程式碼,得到如下所示的結果。

  此外,如果大家希望柱狀圖是橫向伸展的,就在最後增添+ coord_flip()程式碼即可。

ggplot(data = xlsx_data, mapping = aes(x = Factor, y = q, fill = ...1)) + geom_bar(stat = "identity", position = "dodge") + coord_flip()

  執行上述程式碼,得到如下所示的結果。

  在這裡,我們僅僅是對ggplot()函式做了一個初步的介紹;關於其更深入的瞭解,大家直接檢視其官方幫助文件即可。

  至此,大功告成。

相關文章