本文介紹基於R語言中的readxl包與ggplot2包,讀取Excel表格文件數據,並繪製具有多個系列的柱狀圖、條形圖的方法~ ...
本文介紹基於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()
函數做了一個初步的介紹;關於其更深入的瞭解,大家直接查看其官方幫助文檔即可。
至此,大功告成。