21

我有一个逗号分隔的文件,名为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 来说有点新,所以我仍然在思考它。

4

7 回答 7

14

您不需要这两行:

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

因为 scale 和 serial 已经从read.table.

scale <- data[1]从 a 创建一个元素data.frame

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

scalefromread.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 知识......

于 2009-05-18T09:25:08.140 回答
7

In your example,

plot(scale, serial) 

won't work because scale and serial are both data frames, e.g.

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

You could try the following and use points(), once the plot has been generated, to plot the remaining columns. Note, I used the ylim parameter in plot to accommodate the range in the third column.

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')
于 2009-07-22T02:44:39.433 回答
5
于 2009-06-14T17:36:56.153 回答
2

我远非 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 );
于 2009-05-18T08:56:02.270 回答
2

试试这个:

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)
于 2009-05-18T09:55:31.510 回答
0

There is a simple-r way of plotting it:

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

Using that script, you just have to type:

r -cdps, -k1:2 foo.csv

To get the plot you want. Put it in the verbose mode (-v) to see the corresponding R script.

于 2013-10-01T04:26:39.507 回答
0
data <- read.table(...)
plot(data$scale,data$serial)
于 2013-11-02T00:39:41.870 回答