【问题标题】:How to plot a multicolumn CSV file?如何绘制多列 CSV 文件?
【发布时间】:2012-12-09 03:18:43
【问题描述】:

我对 R 很陌生,所以请原谅我的问题可能很愚蠢。

我有一个多列 CSV(纯逗号分隔,无引号)文件,其中第一行是标题,第一列是连续整数索引,其他 17 列是函数的浮点值。

任务是在同一张图表上绘制所有 17 条线(具有相同的轴)。

听起来很简单,但实际上做起来并不明显。

【问题讨论】:

    标签: r csv charts


    【解决方案1】:

    您可以使用read.csv 将数据作为data.frame 输入。然后你有很多绘图的选择。对于大多数调查工作,我更喜欢 lattice

    两个格子。在这里,我正在为图表创建随机数据。

    library(lattice)
    d <- data.frame(index=1:20, x=rnorm(20), y=rnorm(20))
    
    > head(d, n=3)
      index         x          y
    1     1 -1.065591  0.2422635
    2     2 -1.563782 -1.4250984
    3     3  1.156537  0.3659411
    
    xyplot(x+y~index, data=d, type='l', auto.key=list(space='right'))
    

    您可以根据列名生成公式。我通常不会根据提示执行此操作,而是在代码中使用此类结构:

    f <- paste(paste(names(d[,-1,drop=FALSE]), collapse="+"),
               names(d[,1,drop=FALSE]),
               sep=" ~ ")
    
    xyplot(as.formula(f), data=d, type='l', auto.key=list(space='right'))
    

    在 Ben 的回答中,type='l' 指定了行。积分的默认值为type='p'。我在这里添加了auto.key 参数来标记系列。

    【讨论】:

    • 在我用d &lt;- read.table("mytable.csv") 加载我的数据并发出head(d, n=3) 命令后,标题行以巨大的偏移量显示 - 看起来是空的,要向右滚动才能看到实际的标题。当我发出xyplot(x+y~index, data=d,type='l') 命令时,它会给出Error in eval(expr, envir, enclos) : object 'x' not found。但是 Ben 的解决方案适用于相同的文件,并且您的随机数据示例也适用。
    • 在我的示例中,xy 是数据框中列的名称。您需要使用实际的列名。我应该指定read.csv,因为它会为您提供正确的默认值(header=TRUE, sep=",")。我将编辑以反映这一点。您的数据中有哪些列名?
    【解决方案2】:

    可能是最紧凑、仅基于 R 的解决方案

    mydata <- read.csv("mydatafile.csv")
    matplot(mydata[, 1], mydata[, -1], type="l")
    
    • header=TRUEread.csv() 的默认选项,因此您无需明确指定标题行的存在
    • mydata[, 1] 选择第一列; mydata[, -1] 选择除了第一列
    • type="l" 选择线(默认为点);请参阅?matplot?plot 了解更改线型、颜色等的详细信息……

    一旦您知道matplot 很有用,您就可以在 StackOverflow 中搜索其他示例,例如How to draw multiple Lines from csv in R

    【讨论】:

    • 谢谢你,@ben-bolker,你的回答很好地解决了我的问题。我希望你不介意我接受马修的回答,因为它也解决了问题,马修的声望点还少得多。
    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 2019-11-19
    • 2020-10-24
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多