【发布时间】:2012-12-09 03:18:43
【问题描述】:
我对 R 很陌生,所以请原谅我的问题可能很愚蠢。
我有一个多列 CSV(纯逗号分隔,无引号)文件,其中第一行是标题,第一列是连续整数索引,其他 17 列是函数的浮点值。
任务是在同一张图表上绘制所有 17 条线(具有相同的轴)。
听起来很简单,但实际上做起来并不明显。
【问题讨论】:
我对 R 很陌生,所以请原谅我的问题可能很愚蠢。
我有一个多列 CSV(纯逗号分隔,无引号)文件,其中第一行是标题,第一列是连续整数索引,其他 17 列是函数的浮点值。
任务是在同一张图表上绘制所有 17 条线(具有相同的轴)。
听起来很简单,但实际上做起来并不明显。
【问题讨论】:
您可以使用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 <- 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 的解决方案适用于相同的文件,并且您的随机数据示例也适用。
x 和 y 是数据框中列的名称。您需要使用实际的列名。我应该指定read.csv,因为它会为您提供正确的默认值(header=TRUE, sep=",")。我将编辑以反映这一点。您的数据中有哪些列名?
可能是最紧凑、仅基于 R 的解决方案
mydata <- read.csv("mydatafile.csv")
matplot(mydata[, 1], mydata[, -1], type="l")
header=TRUE 是 read.csv() 的默认选项,因此您无需明确指定标题行的存在mydata[, 1] 选择第一列; mydata[, -1] 选择除了第一列type="l" 选择线(默认为点);请参阅?matplot、?plot 了解更改线型、颜色等的详细信息……一旦您知道matplot 很有用,您就可以在 StackOverflow 中搜索其他示例,例如How to draw multiple Lines from csv in R
【讨论】: