在R中绘制简单数据

时间:2009-05-18 08:16:11

标签: r plot

我有一个名为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轴)?我正在尝试这个(来自阅读this site):

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

知道我做错了什么吗? quick Google search显示其他人遇到相同问题,但没有相关答案。更新:事实证明,如果我跳过中间的两个赋值语句,它可以正常工作。知道为什么会这样吗?

第二个问题很容易在第一个问题之后:

2)如何绘制第一列(x轴)与y轴上的所有其他列?一旦我解决了我遇到的第一个问题,我认为这很容易,但我对R来说有点新,所以我仍然围绕着它。

7 个答案:

答案 0 :(得分:12)

您不需要这两行:

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

因为已经从read.table中的标题设置了比例和序列号。

同样scale <- data[1]会从data.frame

创建一个元素
  data[1]
1     5
2    10
3    12
4    15

而来自scale的{​​{1}}是向量

read.table

并且5 10 12 15 函数需要vector而不是data.frame,所以你只需要做

plot(scale, serial)

在y轴上绘制其他数据列的一种方法:

plot(scale, serial)

可能有更好的方法可以做到这一点,但这超出了我目前的R知识......

答案 1 :(得分:7)

在您的示例中,

plot(scale, serial) 

无效,因为scaleserial都是数据框,例如

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')

答案 2 :(得分:5)

我是R的新手,但是如果你想在一个情节中绘制比例尺,而不是用于打印或演示,那么你可以使用Hadley Wickham教授的包ggplot2&amp;重塑。

安装:

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)选择不同的颜色或形状,调整轴,为每一行设置单独的选项等。

链接到online documentation

答案 3 :(得分:2)

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

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

它至少在我的R设置上绘制了一些内容!

根据luapyad的回答,我提出了这个建议。我重命名了标题“scale”:

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 );

答案 4 :(得分: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)

答案 5 :(得分:0)

有一种简单的方法可以绘制它:

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

使用该脚本,您只需输入:

r -cdps, -k1:2 foo.csv

获得你想要的情节。将其置于详细模式(-v)以查看相应的R脚本。

答案 6 :(得分:0)

data <- read.table(...)
plot(data$scale,data$serial)