将多个 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 作为变量。使用上面的代码我可以得到如下图。