如何在R中从Excel中的数据绘制多行

如何在R中从Excel中的数据绘制多行,r,ggplot2,R,Ggplot2,我对R有点陌生,有没有办法把ColA画成X轴,ColB画成y轴,ColC画成X轴,ColD画成y轴等等。所有成对的col都有相同的名称(例如,ColA=Dis和Colb=hard,ColC=Dis和COLd=hard等等)。 基本上,我所做的是,我将不同excel中不同表中的所有Dis和硬数据合并到一个数据表中,然后我想我可以用excel绘制它,但是excel在一个图中只能显示255条曲线,我可能有1000条曲线。然后,我的数据集如下所示: A B C D E F G H Dis hard

我对R有点陌生,有没有办法把ColA画成X轴,ColB画成y轴,ColC画成X轴,ColD画成y轴等等。所有成对的col都有相同的名称(例如,ColA=Dis和Colb=hard,ColC=Dis和COLd=hard等等)。
基本上,我所做的是,我将不同excel中不同表中的所有Dis和硬数据合并到一个数据表中,然后我想我可以用excel绘制它,但是excel在一个图中只能显示255条曲线,我可能有1000条曲线。然后,我的数据集如下所示:


A B C D E F G H


Dis hard Dis hard Dis hard Dis hard


1 3 4 6 9 11 15 20


3 4 6 9 11 22 25 30


等等 我尝试了以下代码:

nwb1<-read.xlsx("newresult.xlsx")
nwb1<-as.data.frame(nwb1)
ggplot(data=nwb1, aes(x=displacement, y=hardness)) + geom_line() + geom_point( size=4, shape=21, fill="white")

nwb1让我们试试这样的方法,我没有您的数据,因此为了便于说明,我先创建3个excel文件,每个文件都有一个列调用Dis,另一个调用hard:

library(openxlsx)
for(i in 1:3){
df = data.frame(Dis=1:10,hard=rpois(10,i)) 
write.xlsx(df,file=paste("file",i,".xlsx",sep=""))
}
现在,我们开始创建要打印的所有excel文件的矢量:

fl = c("file1.xlsx","file2.xlsx","file3.xlsx")
df = lapply(fl,function(i){
x = read.xlsx(i)
x$sample=sub(".xlsx","",i)
x
})

df = do.call(rbind,df)
head(df)
  Dis hard sample
1   1    1  file1
2   2    0  file1
3   3    0  file1
4   4    2  file1
5   5    2  file1
6   6    2  file1
dataframe df是从所有excel文件连接而来的,并且有一个额外的列调用示例来表示它来自的文件。如果在读取/组合文件时遇到更多问题,也可以在excel中创建这样的表。一旦你有了这样的东西,我们会画:

ggplot(data=df, aes(x=Dis, y=hard,col=sample)) + geom_line() + 
geom_point( size=4, shape=21, fill="white")

如果您已将数据与excel合并,您将在一个非常奇怪的data.frame中读取数据,您可以尝试以下操作,不推荐

values = do.call(cbind,lapply(1:5,function(i)cbind(1:10,1:10+rnorm(10))))
df = data.frame(rbind(rep(c("Dis","hard"),5),values))
colnames(df)=LETTERS[1:10]
head(df)
    A                B   C                 D   E                 F   G
1 Dis             hard Dis              hard Dis              hard Dis
2   1 1.09836250501178   1 0.350206285061174   1 0.620196066920137   1
3   2 1.81400395465058   2   4.2990376623795   2  1.00810320999903   2
4   3 3.94001753647332   3  3.32736042411927   3  3.23285030270875   3
5   4 3.93795305230344   4  4.14948397718842   4  3.88849871990867   4
6   5 5.08952019766558   5  5.18257115670042   5  4.72275692563252   5
                 H   I                J
1             hard Dis             hard
2 1.08603311982134   1 0.51876628213101
3 1.38614529438877   2 1.73020370187464
4 2.70650988128661   3 4.65143843701136
5 3.26676976653313   4 5.17606099966858
6 5.00453246607507   5 6.72671659884557

newdf = data.frame(
Dis=as.numeric(unlist(lapply(df[-1,df[1,] == "Dis"],as.character))),
hard=as.numeric(unlist(lapply(df[-1,df[1,] == "hard"],as.character))),
group = rep(1:(ncol(df)/2),each=nrow(df)-1)
)
ggplot(newdf,aes(x=Dis,y=hard,group=group))+geom_line()

一般来说,一旦你尝试了某件事,问一个问题是理想的。您在internet上搜索过R中的方法吗?如果是,您找到了什么?我尝试过直接使用ggplot2,错误消息显示“数据`必须唯一命名,但有重复的列”我是否应该更改列的名称?因为我有2000个cols数据,这样做有点多余。你能编辑你的问题来显示你正在做的代码/工作吗?(编辑器中提供了一个代码格式化工具。)人们可以更轻松地帮助您处理一些不起作用的事情,而不是从头开始为您编写新代码。嘿,您有重复的列名。你把它们重命名为Dis和hard了吗?李玉成,也许这是两个问题:(1)读取“xlsx”文件,处理重复的列名;(2)如何在x轴上每隔一行绘制数据,等等。两者相对不相关。我已将不同Excel中不同表中的所有DI和hard合并到一个数据表中。Dis和hard在一个数据表中重复。你知道这是怎么回事吗plotted@liyucheng,这是可以做到的,但您计划如何在一个绘图中显示所有1000条曲线?比如你怎么知道哪个是从哪个来的呢?就像所有的曲线都显示了一个趋同的趋势,我只想显示一般的趋势,而不是从哪个来的。我建议使用上面的代码来合并数据集和绘图。。不要使用“col=…”,否则数据很难处理