Domanda

Ho un file chiamato foo.csv separato da virgole contenente i seguenti dati:

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

Ho essenzialmente due domande:

1) Come faccio a tracciare la prima colonna (asse x) contro la seconda colonna (asse y)? Sto cercando questo (dalla lettura questo sito ):

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

Ma ottengo questo errore di nuovo:

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

Qualche idea di cosa sto facendo male? Un rapida ricerca su Google rivela qualcun altro con lo stesso problema ma nessuna risposta rilevante. UPDATE: Si scopre che funziona bene se ho saltare le due istruzioni di assegnamento nel mezzo. Qualsiasi idea del perché questo è?

La seconda domanda segue abbastanza facilmente dopo la prima:

2) Come faccio a tracciare la prima colonna (asse x) rispetto a tutte le altre colonne sul l'asse y? Presumo è abbastanza facile una volta che ottengo in tutto il primo problema che sto funzionando in, ma sono solo un po 'nuova per R in modo sto ancora confezionamento mia testa intorno ad esso.

È stato utile?

Soluzione

Non è necessario le due linee:

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

come scala e di serie sono già impostati dalle intestazioni del read.table.

Anche scale <- data[1] crea un elemento da un data.frame

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

, mentre scale dal read.table è un vettore

5 10 12 15

e la funzione plot(scale, serial) aspetta vettore piuttosto che un data.frame, quindi basta fare

plot(scale, serial)

Un approccio per tracciare le altre colonne di dati sulla asse 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")

Probabilmente ci sono modi migliori di fare questo, ma che è oltre le mie conoscenze attuali R ....

Altri suggerimenti

Nel tuo esempio,

plot(scale, serial) 

non funzionerà perché scale e serial sono entrambi i frame di dati, per es.

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

Si potrebbe provare la seguente e l'uso points(), una volta che la trama è stata generata, per tracciare le colonne rimanenti. Nota, ho usato il parametro ylim in plot per accogliere l'intervallo nella terza colonna.

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

Sono nuovo in R, ma se si vuole disegnare scala contro tutte le altre colonne in una trama, semplice e con una certa eleganza :) per la stampa o la presentazione, è possibile utilizzare i pacchetti del Prof. Hadley Wickham ggplot2 e rimodellare.

Installazione:

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

Disegno tuo esempio:

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)

Si potrebbe anche usare punti (geom=”points”), scegliere i colori o forme diverse per diverse variabili punti (colours=variable or shape=variable), regolare l'asse, impostare le opzioni individuali per ogni linea, ecc.

documentazione in linea .

Sono ben lungi dall'essere un esperto R, ma credo che avete bisogno di un data.frame:

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

Lo fa almeno trama qualcosa sulla mia configurazione R!

Seguendo il consiglio di risposta di luapyad, sono arrivato fino a questo. Ho rinominato l'intestazione "scala":

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

quindi:

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

Prova questo:

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)

C'è un modo semplice-r di complotto è:

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

Utilizzando lo script, basta digitare:

r -cdps, -k1:2 foo.csv

Per ottenere la trama che si desidera. Mettilo in modalità verbose (-v) per vedere lo script R corrispondente.

data <- read.table(...)
plot(data$scale,data$serial)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top