本文介紹基於R語言中的readxl包與ggplot2包,讀取Excel表格文件數據,並繪製具有多個系列的柱狀圖、條形圖的方法。
首先,我們配置一下所需用到的R語言readxl包與ggplot2包;其中,readxl包是用來讀取Excel表格文件數據的,而ggplot2包則是用以繪製柱狀圖的。包的下載方法也非常簡單,以readxl包為例,我們輸入如下的代碼即可。
install.packages("readxl")
輸入代碼後,按下回車鍵,運行代碼;如下圖所示。

待readxl包下載完成後,通過同樣的方法配置ggplot2包。
install.packages("ggplot2")
此外,在用代碼進行數據分析、可視化時,有時需要對數據加以長數據與寬數據的轉換(具體什麼意思在後文有介紹),這裏需要用到另一個R語言包reshape2,我們也就在此將其一併配置好。
install.packages("reshape2")
接下來,我們即可開始代碼的撰寫。首先,我們將需要用到的包導入。
library(readxl)
library(ggplot2)
library(reshape2)
隨後,我們進行Excel表格文件數據的讀取;這裏我們就通過readxl包中的read_excel()函數來實現表格數據的讀取。其中,函數的第一個參數表示待讀取的Excel表格文件路徑與名稱,第二個參數則表示這些數據具體在哪一個Sheet中;由於我這裏需要的數據存放在Excel表格文件的第2個Sheet中,因此就選擇sheet = 2即可。
xlsx_file <- read_excel(r"(E:\02_Project\01_Chlorophyll\ClimateZone\Split\Result\Result.xlsx)", sheet = 2)
其中,原本在表格文件中我的數據如下所示。

通過上述代碼,我們即可將數據讀入R語言中;其具體格式如下圖所示。可以看到,讀入後的數據是一個tibble類別的變量,tibble是Data 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()函數做了一個初步的介紹;關於其更深入的瞭解,大家直接查看其官方幫助文檔即可。
至此,大功告成。