我有一个带有三个工作表的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