我有一個帶有三個工作表的Excel文件:工作表1,工作表2,工作表3.每個工作表都有x和y列。 我想提出三個地塊X-Y到一個情節像下面將多個Excel工作表繪製到一個圖表中,而無需重複讀取.xlsx
我所做的就是分開讀取每個表和「陰謀+線」。
是否有任何循環方法來做到這一點?因爲我會有超過三張。
我有一個帶有三個工作表的Excel文件:工作表1,工作表2,工作表3.每個工作表都有x和y列。 我想提出三個地塊X-Y到一個情節像下面將多個Excel工作表繪製到一個圖表中,而無需重複讀取.xlsx
我所做的就是分開讀取每個表和「陰謀+線」。
是否有任何循環方法來做到這一點?因爲我會有超過三張。
我認爲這裏的一個好方法是將每張表單讀入一個數據框列表,將它們堆疊到一個包含源表單標識符的數據框中,然後使用ggplot2進行繪圖。
下面是我創建的一個名爲test.xlsx
的簡單Excel文件的示例。它有三張表,每張表有四行數據,如下所示。該代碼假定Excel文件位於當前工作目錄中。如果沒有,請在讀取數據時爲文件提供適當的路徑。我使用了readxl
包來讀取數據。此方法將任意數量的具有相同列名的工作表推廣到Excel工作簿(儘管您可以執行其他處理以處理不同工作表中的不同列名稱)。
library(readxl)
library(dplyr)
library(ggplot2)
# Get sheet names
sht = excel_sheets("test.xlsx")
sht
[1] "Sheet 3" "Sheet 2" "Sheet1"
# Read each sheet into a list
df = lapply(setNames(sht, sht), function(s) read_excel("test.xlsx", sheet=s))
df
$`Sheet 3` x y 1 1 10 2 2 11 3 3 12 4 4 13 $`Sheet 2` x y 1 1 5 2 2 6 3 3 7 4 4 8 $Sheet1 x y 1 1 1 2 2 2 3 3 3 4 4 4
# Convert to a single data frame with a column for the source sheet
df = bind_rows(df, .id="Sheet")
# Plot
ggplot(df, aes(x,y,colour=Sheet)) +
geom_line() +
scale_y_continuous(limits=c(0,max(df$y))) +
theme_classic()
另一種方法可以是使用它具有稱爲getSheets
的功能,它可以告訴您工作簿中的工作表名稱和數量。我在閱讀工作表的名稱,然後使用它們爲所有工作表創建數據列表。我將這些數據組合成一個長格式,稍後用於ggplot。
library(xlsx)
setwd("/Users/pradeepkumar/Desktop/Misc") ###set your working directory where your data resides
sheetname <- getSheets(loadWorkbook("Workbook1.xlsx"))
s1 <- lapply(names(sheetname),function(x)read.xlsx("Workbook1.xlsx",sheetName = x))
names(s1) <- names(sheetname)
final_data <- data.frame(do.call("rbind",s1))
sheets <- rownames(final_data)
sheets <- gsub("\\.\\d{1,}","",sheets)
final_data$sheets <- sheets
rownames(final_data) <- NULL
library(ggplot2)
ggplot(data=final_data,aes(x=x,y=y,color=sheets)) + geom_line()
例如我有三片(1,2和3)
我在它們中的每三個不同的數據集,其中x和y爲變量的工作簿(Workbook1.xlsx)。使用上面的代碼,我可以得到如下圖。
完美!非常感謝! – futong