将多个 Excel 张绘制成一个图表而不重复 read.xlsx
Plot multiple Excel sheets into one graph without repeating read.xlsx
我有一个包含三个 sheet 的 excel 文件:sheet 1、sheet 2、sheet 3。
每个 sheet 都有 x 和 y 列。
我想把三个图 x-y 放到一个图中,如下所示
我所做的是每 sheet 秒分别阅读,'plot + lines'。
有循环的方法吗?因为我会有三个以上的 sheets.
我认为这里的一个好方法是将每个 sheet 读入数据帧列表,将它们堆叠到一个包含源 sheet 标识符的数据帧中,然后使用 ggplot2 绘图。
这是我创建的名为 test.xlsx
的简单 Excel 文件的示例。它有三个 sheet,每个有四行数据,如下图所示。该代码假定 Excel 文件位于当前工作目录中。如果不是,请在读取数据时提供文件的适当路径。我使用 readxl
包来读取数据。此方法概括为 Excel 工作簿,其中包含任意数量的具有相同列名的 sheet(尽管您可以进行额外处理以处理不同 sheet 中的不同列名)。
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()
另一种方法是使用 library(xlsx)
,它有一个名为 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)的工作簿 (Workbook1.xlsx)
我有三个不同的数据集,每个数据集都以 x 和 y 作为变量。使用上面的代码我可以得到如下图。
我有一个包含三个 sheet 的 excel 文件:sheet 1、sheet 2、sheet 3。 每个 sheet 都有 x 和 y 列。 我想把三个图 x-y 放到一个图中,如下所示
我所做的是每 sheet 秒分别阅读,'plot + lines'。
有循环的方法吗?因为我会有三个以上的 sheets.
我认为这里的一个好方法是将每个 sheet 读入数据帧列表,将它们堆叠到一个包含源 sheet 标识符的数据帧中,然后使用 ggplot2 绘图。
这是我创建的名为 test.xlsx
的简单 Excel 文件的示例。它有三个 sheet,每个有四行数据,如下图所示。该代码假定 Excel 文件位于当前工作目录中。如果不是,请在读取数据时提供文件的适当路径。我使用 readxl
包来读取数据。此方法概括为 Excel 工作簿,其中包含任意数量的具有相同列名的 sheet(尽管您可以进行额外处理以处理不同 sheet 中的不同列名)。
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()
另一种方法是使用 library(xlsx)
,它有一个名为 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)的工作簿 (Workbook1.xlsx)
我有三个不同的数据集,每个数据集都以 x 和 y 作为变量。使用上面的代码我可以得到如下图。