Pergunta

Eu tenho uma vírgula separados arquivo chamado foo.csv contendo os seguintes dados:

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

I tem basicamente duas perguntas:

1) Como traçar a primeira coluna (eixo dos xx) versus a segunda coluna (eixo-y)? Eu estou tentando isso (a partir da leitura neste site ):

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

Mas eu recebo este volta de erro:

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

Qualquer idéia do que estou fazendo de errado? A rápida pesquisa no Google revela alguém com o mesmo problema mas nenhuma resposta relevante. UPDATE: Acontece que ele funciona muito bem se eu ignorar as duas instruções de atribuição no meio. Qualquer idéia de por que isso é?

A segunda questão segue muito facilmente após a primeira:

2) Como faço para traçar a primeira coluna (eixo x) versus todas as outras colunas no eixo y? Eu presumo que é muito fácil uma vez que recebo em torno do primeiro problema que eu estou correndo em, mas sou um pouco novo para R então eu ainda estou quebra minha cabeça em torno dele.

Foi útil?

Solução

Você não precisa das duas linhas:

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

como escala e de série já estão definidas a partir dos cabeçalhos no read.table.

Além disso scale <- data[1] cria um elemento de uma data.frame

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

enquanto scale do read.table é um vector

5 10 12 15

e espera função plot(scale, serial) vetor em vez de um data.frame, assim você só precisa fazer

plot(scale, serial)

Uma abordagem para traçando as outras colunas de dados no eixo-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")

Existem provavelmente melhores maneiras de fazer isso, mas isso está além do meu conhecimento R actual ....

Outras dicas

No seu exemplo,

plot(scale, serial) 

não vai funcionar porque scale e serial são os dois quadros de dados, por exemplo.

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

Você pode tentar o seguinte e uso points(), uma vez que a parcela foi gerada, para traçar as colunas restantes. Note-se, I utilizado o parâmetro ylim em plot para acomodar a gama na terceira coluna.

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

Eu sou novo no R, mas se você quiser desenhar escala vs. todas as outras colunas em um enredo, fácil e com alguma elegância :) para impressão ou apresentação, você pode usar pacotes do Prof. Hadley Wickham ggplot2 & remodelar.

Instalação:

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

Tiragem seu exemplo:

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)

Você também pode usar pontos (geom=”points”), escolher diferentes cores e formas para diferentes pontos variáveis ??(colours=variable or shape=variable), ajuste do eixo, defina opções individuais para cada linha etc.

Link para documentação on-line .

Estou longe de ser um especialista R, mas eu acho que você precisa de um data.frame:

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

Ele faz pelo menos trama algo na minha configuração R!

Seguindo o conselho na resposta de luapyad, eu vim com isso. I renomeado o cabeçalho "escala":

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

então:

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

Tente isto:

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)

Há uma maneira simples-r de tramar-lo:

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

Usando esse script, você só precisa digitar:

r -cdps, -k1:2 foo.csv

Para obter o enredo que você deseja. Colocá-lo no modo detalhado (-v) para ver o script R correspondente.

data <- read.table(...)
plot(data$scale,data$serial)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top