首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在R中绘制简单数据

在R中绘制简单数据
EN

Stack Overflow用户
提问于 2009-05-18 08:16:11
回答 7查看 82.1K关注 0票数 21

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

代码语言:javascript
复制
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):

代码语言:javascript
复制
data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)

但是我得到了这个错误:

代码语言:javascript
复制
Error in stripchart.default(x1, ...) : invalid plotting method

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

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

2)如何绘制第一列(x轴)与y轴上所有其他列的对比图?我假设一旦我解决了我遇到的第一个问题,这就相当容易了,但我只是对R有点陌生,所以我仍然在考虑它。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-05-18 09:25:08

您不需要这两行代码:

代码语言:javascript
复制
scale <- data[1]
serial <- data[2]

as scale和serial已从read.table中的标头设置。

此外,scale <- data[1]还从data.frame创建元素

代码语言:javascript
复制
  data[1]
1     5
2    10
3    12
4    15

而来自read.tablescale是一个向量

代码语言:javascript
复制
5 10 12 15

而且plot(scale, serial)函数需要的是向量而不是data.frame,所以您只需这样做

代码语言:javascript
复制
plot(scale, serial)

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

代码语言:javascript
复制
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知识……

票数 14
EN

Stack Overflow用户

发布于 2009-07-22 02:44:39

在您的示例中,

代码语言:javascript
复制
plot(scale, serial) 

不会工作,因为scaleserial都是数据帧,例如

代码语言:javascript
复制
class(scale)
[1] "data.frame"

您可以尝试执行以下操作,并在生成绘图后使用points()来绘制其余的列。注意,我在plot中使用了ylim参数来适应第三列中的范围。

代码语言:javascript
复制
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')
票数 7
EN

Stack Overflow用户

发布于 2009-06-14 17:36:56

我是R的新手,但如果您想在一个图中绘制比例与所有其他列的比例,简单而优雅:)用于打印或演示,您可以使用Hadley Wickham教授的packages ggplot2 & reshape。

安装:

代码语言:javascript
复制
install.packages(“ggplot2”,dep=T)
install.packages(“reshape”,dep=T)

绘制您的示例:

代码语言:javascript
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/876711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档