题
我有一个包含以下数据的逗号分隔的文件名为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)
不会工作,因为scale
和serial
均为数据帧,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)