我有一个包含以下数据的逗号分隔的文件名为foo.csv

scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

我基本上有两个问题:

1)如何绘制的第一列(x轴)相对于第二列(y轴)?我想这(从阅读本网站):

data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)

不过,我得到这个错误回:

Error in stripchart.default(x1, ...) : invalid plotting method

任何想法,我做错了什么?一个快速谷歌搜索揭示了别人同样的问题但没有相关的答案。更新:原来,如果我跳过中间的两个赋值语句,它工作正常。任何想法,这是为什么?

第一后的第二个问题如下很容易地:

2)如何绘制的第一列(x轴)相对于在y轴上的所有其他列?我相信这是很容易,一旦我身边我遇到的第一个问题搞定,但我只是有点新的与R,所以我仍然包裹我的头周围。

有帮助吗?

解决方案

您不需要两行:

scale <- data[1]
serial <- data[2]

如规模和序列已经从read.table头设置。

此外scale <- data[1]data.frame创建了一个元素

  data[1]
1     5
2    10
3    12
4    15

而来自scale read.table是载体

5 10 12 15

plot(scale, serial)函数需要,而不是一个data.frame矢量,所以你需要做的仅仅

plot(scale, serial)

一种方法在y轴绘制数据的另一列:

plot(scale,serial, ylab="")
par(new=TRUE) 
plot(scale,spawn,axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,for., axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,worker,axes=F, ylab="", type="b")

有可能这样做的更好的方法,但是这超出了我的当前R知识....

其他提示

在您的例子中,

plot(scale, serial) 

不会工作,因为scaleserial均为数据帧,e.g。

class(scale)
[1] "data.frame"

您可以尝试以下和使用points(),一旦阴谋已经产生,绘制其余列。注意,我使用的ylim plot参数,以满足在第三列的范围内。

data <- read.csv('foo.csv', header=T)
plot(data$scale, data$serial, ylim=c(0,750))
points(data$scale, data$spawn, col='red')
points(data$scale, data$for., col='green')
points(data$scale, data$worker, col='blue')

我是R中新的,但如果你想在一个情节,容易与一些优雅:)用于打印或演示文稿提请规模与所有其他列,您可以使用教授哈德利韦翰的包GGPLOT2与重塑。

安装:

install.packages(“ggplot2”,dep=T)
install.packages(“reshape”,dep=T)

图纸您的示例:

library(ggplot2)
library(reshape)

#read data
data = read.table("foo.csv", header=T,sep=",")

#melt data “scale vs. all”
data2=melt(data,id=c("scale"))
data2

   scale variable      value
1      5   serial   0.000178
2     10   serial   0.156986
3     12   serial   2.658998
4     15   serial 188.023411
5      5    spawn   0.000288
6     10    spawn   0.297926
7     12    spawn   6.059502
8     15    spawn 719.463264
9      5     for.   0.000292
10    10     for.   0.064509
11    12     for.   0.912733
12    15     for. 164.111459
13     5   worker   0.000300
14    10   worker   0.066297
15    12   worker   0.923606
16    15   worker 161.687982

#draw all variables at once as line with different linetypes
qplot(scale,value,data=data2,geom="line",linetype=variable)

您也可以使用点(geom=”points”),选择不同的颜色或形状为不同的变量的点(colours=variable or shape=variable),调节轴,对于每一个线等设置个别选项。

链接到在线文档

我远远的R专家,但我认为你需要一个data.frame:

plot(data.frame(data[1],data[2]))

它确实至少情节的东西在我的[R设置!

继luapyad的答复意见,我想出了这个。我改名为标题“规模”:

scaling, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

然后:

foo <- read.table("foo.csv", header=T,sep=",")
attach(foo)
plot( scaling, serial );

尝试这种情况:

data <- read.csv('foo.csv')
plot(serial ~ scale, data)
dev.new()
plot(spawn ~ scale, data)
dev.new()
plot(for. ~ scale, data)
dev.new()
plot(worker ~ scale, data)

有是绘制它的一个简单-R的方法:

https://code.google.com/p/simple-r/

使用该脚本,你只需要输入:

r -cdps, -k1:2 foo.csv

要得到你想要的情节。把它放在详细模式(-v)看到相应的R脚本。

data <- read.table(...)
plot(data$scale,data$serial)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top