从包含n列的xlsx文件创建多个图形/绘图

时间:2016-01-17 22:07:01

标签: r excel plot ggplot2

我有一个包含多个列的.xlsx文件(具有一些相互依赖性)。我想使用选定数量的列在同一图表上绘制多个图表。第一列是Date(这将是我唯一的X变量),其余的兴趣列将是Y值。此文件中有1000行数据。  enter image description here

所以......

X轴......"日期"仅列 Y轴(多个数据)...列B,C,D,E,T,U,V

问题:
如何:
1)阅读文件
2)绘制数据的折线图,全部在同一图表上(X轴=日期,Y轴= B,C,D,E,T,U,V列) 3)使用某种类型的图例对每行进行颜色编码

我已经阅读了这篇文章以及更多内容(不允许发布2个以上的链接?)...没有任何帮助。大多数都太随意了:
how to plot all the columns of a data frame in R

1 个答案:

答案 0 :(得分:0)

您遇到的问题是此标签/子标签组合。它们搞砸了导入(变量类无法识别)。这是一个两步解决方案。

  1. 在第一步中,我们导入数据库只是为了提取干净的列名。我为此做的是将主标签(第2行)与子标签(第3行)连接起来。有两对相同的列标签,因此我们也将它们重命名为具有干净的名称(我建议您花时间检查您的变量名称并给它们正确的标签)。然后我们将它们保存为对象(n)。
  2. 然后,我们再次导入文件,跳过前两行。这样,read_excel知道期望什么类。我们将以前保存的名称分配给新的data.frame。现在数据很干净。剩下的很简单:用tidyr:gather融化并用ggplot绘图。
  3. 代码

    library(readxl)
    library(tidyr)
    library(zoo)
    library(ggplot2)
    df <- read_excel("./myfile.xlsx",skip = 1)
    
    names(df)[!is.na(df[1,])] <- paste(na.locf(names(df)[!is.na(df[1,])]),df[1,][!is.na(df[1,])],sep="_")
    names(df)[duplicated(names(df))] <- paste0(names(df)[duplicated(names(df))],"bis")
    
    n <- names(df)
    
    df <- read_excel("./myfile.xlsx",skip = 2)
    names(df) <- n
    # df <- dplyr::slice(df,1:3) # this line is for the censored datafile that has only three rows
    
    melted <- gather(df,key,value,-Date)
    
    ggplot(melted, aes(x=Date,y=value,color=key)) + geom_line()
    

    当然,只有三行数据,结果很难看:

    enter image description here